我正在尝试使用 Mockito 测试 Activity &Dagger http://square.github.com/dagger/。我已经能够在应用程序中向 Activity 注入依赖项,但是在测试 Activity 时,我无法向 Activity 注入模拟。我应该注入 Activity 来测试还是让 getActivity() 创建它?
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);
}
}
我使用 Mockito 和 Dagger 进行功能测试。
关键概念是您的测试类继承自 ActivityUnitTestCase,而不是 ActivityInstrumentationTestCase2;后一个超类调用 Activity 的 onStart() 生命周期方法,阻止您注入测试双倍依赖项,但使用第一个超类,您可以更细粒度地处理生命周期。
您可以在以下位置查看我使用 dagger-1.0.0 和mockito 进行测试活动和片段的工作示例:
https://github.com/IIIRepublica/android-civicrm-test https://github.com/IIIRepublica/android-civicrm-test
正在测试的项目位于:
https://github.com/IIIRepublica/android-civicrm https://github.com/IIIRepublica/android-civicrm
希望这对您有帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)