2.Robolectric,Rule

1.测试类使用Daager2的时机:

如果被测类(比如说LoginActivity)的Dependency(LoginPresenter)是通过 field injection inject进去的,那么再测这个类(LoginActivity)的时候,就必须用dagger2,不然很难优雅的把mock传进去。相反,如果被测类有Constructor(比如说LoginPresenter),Dependency是通过Constructor传进去的,那么就可以不使用dagger2,而是直接new对象出来测

2.自定义Rule

如下所示:

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
public class LoginActivityTest {

/**
 * 自定义测试规则
 */
@Rule
public TestRule testRule = new TestRule() {
    @Override
    public Statement apply(final Statement base, final Description description) {
//            final String className = description.getClassName();
//            final String methodName = description.getMethodName();
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                //想要在测试方法运行之前做一些事情,就在base.evaluate()之前做, 注意:测试方法运行之前做的事情同样也能放在apply()方法中,只要是在base.evaluate()之前就行
                String className = description.getClassName();
                String methodName = description.getMethodName();

                base.evaluate();

                //想要在测试方法运行之后做一些事情,就在base.evaluate()之后做
                System.out.println("Class name: "+className +", method name: "+methodName);
            }
        };
    }
};

@Test
public void login3() throws Exception {
    UserManager userManager = mock(UserManager.class);
    LoginPresenter loginPresenter = new LoginPresenter(userManager);
    loginPresenter.login("123456", "654321");

    verify(userManager).performLogin("123456", "654321");
}
}

运行结果为:

运行结果

也可以自定义一个类实现TestRule接口来做。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容