当前位置:  开发笔记 > Android > 正文

DaggerMock库 - 它如何覆盖模块?

如何解决《DaggerMock库-它如何覆盖模块?》经验,为你挑选了1个好方法。

该DaggerMock库,用于覆盖假冒实施匕首模块.让我们来看看让我困惑的一个robolectric主题:

 @RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 21)
public class MainActivityTest { 

    @Rule public final DaggerMockRule mockitoRule = new DaggerMockRule<>(MyComponent.class, new MyModule())
            .set(new DaggerMockRule.ComponentSetter() { 
                @Override public void setComponent(MyComponent component) { 
                    ((App) RuntimeEnvironment.application).setComponent(component); 
                } 
            }); 

    @Mock RestService restService;

    @Mock MyPrinter myPrinter;

    @Test
    public void testCreateActivity() { 
        when(restService.doSomething()).thenReturn("abc");

        Robolectric.setupActivity(MainActivity.class); 

        verify(myPrinter).print("ABC");
    } 
} 

所以我想知道,这条规则究竟发生了什么?我可以看到RestService由MyModule提供,但现在被替换为mock.但是在示例中我没有看到任何地方的@Inject,所以我很困惑该模块甚至首先用于提供任何依赖项?



1> 小智..:

我是DaggerMock的作者,感谢您的尝试!

实现有点复杂,规则创建模块的动态子类(使用mockito)并覆盖提供方法.该规则扫描测试字段,以便在模块具有返回相同类型的方法时返回字段.

最终结果与Mockito InjectMocks注释非常相似.你可以看看github上的实现,覆盖模块的核心类是:https://github.com/fabioCollini/DaggerMock/blob/master/lib/src/main/java/it/cosenonjaviste/daggermock /MockOverrider.java

我在一周前发布了这个lib,欢迎任何反馈!

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有