小编ron*_*tho的帖子

如何使用Dagger模块和Robolectric在Activity onResume()上测试模拟交互?

我正在使用Dagger进行依赖注入,它在我的应用程序中运行良好但我无法测试它.为了创建模块依赖图,我遵循了这种模式:https://github.com/pyricau/shipfaster/blob/master/src/main/java/com/squareup/shipfaster/common/ShipFasterApplication.java

现在,在我的MainActivity测试类中,我希望能够在调用Activity onResume()方法时验证与mock的交互.

这是班级:

@Config(emulateSdk = 18)
@RunWith(RobolectricDaggerTestRunner.class)
public class MainActivityTest extends TestCase {

    @Inject MainActivity sut;
    public @Mock MyObject mockMyObject;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        ObjectGraph.create(new TestModule()).inject(this);
    }

    @Test
    public void testThatMyActivityDelegatesDoSomethingToMyObject(){
        //init
        ActivityController<MainActivity> activityController = ActivityController.of(sut);

        //run
        activityController.create().start().resume();

        //verify
        Mockito.verify(mockMyObject).doSomething();
    }

    @Module(
            includes = {ActivityModule.class},
            injects = MainActivityTest.class,
            overrides = true,
            library = true
    )
    class TestModule {
        @Provides
        MyObject provideMyObject() {
            return mockMyObject;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从我所看到的,该onCreate()方法被调用,但使用的是真实的实例myObject,而不是被模拟的实例.测试失败了"想要但未被调用 …

java android unit-testing robolectric dagger

5
推荐指数
1
解决办法
1073
查看次数

标签 统计

android ×1

dagger ×1

java ×1

robolectric ×1

unit-testing ×1