我正在嘗試使用Mockito測試活動& Dagger。我已經能夠在我的應用程序中向Activity中注入依賴項,但在測試Activity時,我無法將注入模擬注入到Activity中。我應該注入Activity來測試還是讓getActivity()創建它?使用Dagger進行Android功能測試
public class MainActivityTest extends
ActivityInstrumentationTestCase2<MainActivity> {
@Inject Engine engineMock;
private MainActivity mActivity;
private Button mLogoutBtn;
public MainActivityTest() {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
// Inject engineMock to test
ObjectGraph.create(new TestModule()).inject(this);
}
@Override
protected void tearDown() {
if (mActivity != null)
mActivity.finish();
}
@Module(
includes = MainModule.class,
entryPoints = MainActivityTest.class,
overrides = true
)
static class TestModule {
@Provides
@Singleton
Engine provideEngine() {
return mock(Engine.class);
}
}
@UiThreadTest
public void testLogoutButton() {
when(engineMock.isLoggedIn()).thenReturn(true);
mActivity = getActivity();
mLogoutBtn = (Button) mActivity.findViewById(R.id.logoutButton);
// how to inject engineMock to Activity under test?
ObjectGraph.create(new TestModule()).inject(this.mActivity);
assertTrue(mLogoutBtn.isEnabled() == true);
}
}
我們的活動注入自己的onCreate(基類)。我們使用應用程序類的開發版本添加僅限dev模塊到對象圖中。 – 2013-05-10 01:30:17
@JakeWharton你可以指出一個例子,你有Dagger注入模擬UI測試嗎?我從你創建的一些插件知道,你已經和Espresso一起工作過。一個例子,你如何實現測試嘲笑的咖啡測試,將是非常寶貴的! – 2014-04-23 02:10:06