如何测试方法在Mockito中返回boolean

时间:2017-09-16 21:48:01

标签: android junit mockito junit4 powermockito

我正在学习如何在android studio中进行单元测试。如下所示,我有一个名为" isValidUrl"在下面的测试部分,我编写了测试代码 使用Mockito的方法,但测试总是失败。

你能帮忙并告诉我如何测试这种方法吗?

public boolean isValidUrl(String url) {
    return (url != null && !url.equals("")) ? true : false;
}

测试

public class ValidationTest {
@Mock
private Context mCtx = null;

@Before
public void setUp() throws Exception {
    mCtx = Mockito.mock(Context.class);
    Assert.assertNotNull("Context is not null", mCtx);
}

@Test
public void isValidUrl() throws Exception {
    Validation validation = new Validation(mCtx);
    String url = null;
    Mockito.when(validation.isValidUrl(url)).thenReturn(false);
}

}

1 个答案:

答案 0 :(得分:3)

您正在尝试嘲笑“真实”对象(validation)的行为,因此会出现异常。

您需要分开两件事:嘲笑断言

模拟意味着创建类的“假”对象(就像您使用Context所做的那样)并在测试之前定义它们的行为。 在你的情况下

 Mockito.when(validation.isValidUrl(url)).thenReturn(false);

表示,如果调用validation,则告诉isValidUrl(url)对象返回false。你只能用模拟对象做到这一点,在你的情况下,无论如何都没有意义,因为你想测试你的Validation类的“真实”行为,而不是模拟对象的行为。 模拟方法通常用于定义类的依赖关系的行为,在本例中,再次是Context。 对于您在这里的测试,这不是必需的。

断言然后对测试中的类应该如何表现进行实际的“测试”。

您想测试isValid() url null的{​​{1}}是否为Assert.assertEquals(validation.isValid(null), false);

Assert.assertFalse(validation.isValid(null)); 

或更短:

assertEquals

您可以使用assertFalseassertTrueisValid()some others来验证您的url方法是否返回了您希望它返回的内容{ {1}}参数。