android - 如何测试方法在 Mockito 中返回 bool 值

标签 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);
}

最佳答案

您遇到异常是因为您试图模拟“真实”对象的行为(验证)。

您需要将两件事分开:模拟断言

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

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

意味着,如果 isValidUrl(url) 被调用,您告诉 validation 对象返回 false。不过,您只能使用模拟对象来做到这一点,而在您的情况下,这样做毫无意义,因为您想测试 Validation 类的“真实”行为,而不是模拟对象的行为目的。 模拟方法通常用于定义类依赖项的行为,在本例中,又是Context。 对于此处的测试,这不是必需的。

断言 然后对被测类的行为进行实际的“测试”。

您想测试 isValid() 是否为 nullurl 返回 false:

Assert.assertEquals(validation.isValid(null), false); 

或更短:

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

您可以使用assertEqualsassertFalseassertTruesome others验证您的 isValid() 方法是否返回您希望它为给定的 url 参数返回的内容。

关于android - 如何测试方法在 Mockito 中返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46258721/

相关文章:

java - JDBC 连接不适用于 PowerMockito

java - 如何通过 Mockito 对被测类的私有(private)方法进行 stub

android toast打印奇怪的数字而不是单词

Android:如何通过示例获取任何 KeyPress 事件?

java - 如何为 Rest 调用编写 Junit 测试用例?

java - 如何使用Junit测试对象是否被修改?

java - libgdx 多个平移事件

android - Android 的学习曲线是怎样的?

java - 如何在 JUNIT 测试中从 WEB-INF 获取文件

java - Mockito 不 mock