用MVP + Dagger进行Android测试2

我使用依赖注入框架Dagger 2使用模式MVP创建Android应用程序。 应用程序具有用于将请求发送到REST的自定义IntentService。 每个活动都有自己的Dagger组件,用于提供包括Presenter(表示层)和Interactor(模型层)类的所有必需对象。 Presenter包含没有Android SDK的代码 – 只有逻辑。 Interactor可以启动IntentService来接收数据,包含ApplicationContext等

为了测试我的Java / Kotlin类,我使用了JUnit和我自己的模拟类。 对于使用Android SDK的Instrumented测试,我正在使用Espresso

这里是简单的测试我如何做(Kotlin):

@RunWith(AndroidJUnit4::class) @MediumTest class SampleBehaviorTest : UiBehaviorTestBase() { @get:Rule val rule = IntentsTestRule<SampleActivity>(SampleActivity::class.java, true, false) @Inject lateinit var someService: SomeService @Before fun setUp() { (getApp().buildSampleComponent() as MockSimpleComponent).inject(this) val intent = Intent() rule.launchActivity(intent) } @Test fun should_display_trade_on_receive() { someService.doSomeJob() // Assert equals or smth else } } 

问题:使用DI进行类测试确实是个问题 – 当我第一次启动测试时 – 第二个测试失败,第三个测试失败,第一个测试失败,等等。

问题:使用IntentService,DI和MVP模式测试Activity的正确方法是什么? 单元测试可以做到吗?