美文网首页
2.Robolectric,Rule

2.Robolectric,Rule

作者: 岛在深海处 | 来源:发表于2017-06-07 17:05 被阅读0次
    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接口来做。

    相关文章

      网友评论

          本文标题:2.Robolectric,Rule

          本文链接:https://www.haomeiwen.com/subject/zchafxtx.html