需要帮助以使用Mockito和JUnit4编写单元测试 [英] Need help to write a unit test using Mockito and JUnit4

查看:113
本文介绍了需要帮助以使用Mockito和JUnit4编写单元测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

需要帮助,使用Mockito和JUnit4为以下代码编写单元测试,

Need help to write a unit test for the below code using Mockito and JUnit4,

public class MyFragmentPresenterImpl { 
      public Boolean isValid(String value) {
        return !(TextUtils.isEmpty(value));
      }
}

我尝试了以下方法: MyFragmentPresenter mMyFragmentPresenter

I tried below method: MyFragmentPresenter mMyFragmentPresenter

@Before
public void setup(){
    mMyFragmentPresenter=new MyFragmentPresenterImpl();
}

@Test
public void testEmptyValue() throws Exception {
    String value=null;
    assertFalse(mMyFragmentPresenter.isValid(value));
}

但它返回以下异常,

java.lang.RuntimeException:android.text.TextUtils中的方法isEmpty 不嘲笑.有关详细信息,请参见 http://g.co/androidstudio/not-mocked .在 .... p处的android.text.TextUtils.isEmpty(TextUtils.java).

java.lang.RuntimeException: Method isEmpty in android.text.TextUtils not mocked. See http://g.co/androidstudio/not-mocked for details. at android.text.TextUtils.isEmpty(TextUtils.java) at ....

推荐答案

由于JUnit TestCase类无法使用Android相关的API,因此我们必须对其进行模拟.
使用PowerMockito模拟静态类.

Because of JUnit TestCase class cannot use Android related APIs, we have to Mock it.
Use PowerMockito to Mock the static class.

在测试用例类上方添加两行,

Add two lines above your test case class,

@RunWith(PowerMockRunner.class)
@PrepareForTest(TextUtils.class)
public class YourTest
{

}

设置代码

@Before
public void setup() {
    PowerMockito.mockStatic(TextUtils.class);
    PowerMockito.when(TextUtils.isEmpty(any(CharSequence.class))).thenAnswer(new Answer<Boolean>() {
        @Override
        public Boolean answer(InvocationOnMock invocation) throws Throwable {
            CharSequence a = (CharSequence) invocation.getArguments()[0];
            return !(a != null && a.length() > 0);
        }
    });
}

使用我们自己的逻辑实现TextUtils.isEmpty().

That implement TextUtils.isEmpty() with our own logic.

此外,在app.gradle文件中添加依赖项.

Also, add dependencies in app.gradle files.

testCompile "org.powermock:powermock-module-junit4:1.6.2"
testCompile "org.powermock:powermock-module-junit4-rule:1.6.2"
testCompile "org.powermock:powermock-api-mockito:1.6.2"
testCompile "org.powermock:powermock-classloading-xstream:1.6.2"

感谢BehelitException的回答.

这篇关于需要帮助以使用Mockito和JUnit4编写单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆