java - 同时使用 junit 断言和 mockito 验证

标签 java junit mockito

我将 Junit 与 Mockito 结合使用。我使用mockito的verify方法+junit assertion来做完整的验证。这是不可取的吗?我们应该使用其中之一,而不是同时使用两者吗?

最佳答案

两者并用没有错。

Mockito 的 verify 用于断言在给定的 mock 上调用了一个方法(使用预期的参数)。

JUnit 的assertXYZ 用于断言某些结果具有预期值。

两者都是有效的验证,如果两者相关,则两者都应该使用。

例如,考虑以下(不可否认是人为的)情况:

你有一个执行一些数学计算的接口(interface):

public interface ValueProducer {
    public int getValue(int val);
}

还有一个将它产生的任何结果加倍的类:

public class Doubler {
    public static int doubleThatResult (ValueProducer producer, int val) {
        return 2 * producer.getValue(val);
    }
}

测试它需要断言两件事:

  1. 正确调用了 getValue
  2. 结果翻倍

所以,例如:

public class DoublerTest {

    @Test
    public void testDoubleThatResult() throws Exception {
        int value = 7; // Or any other value
        int returnMock = 13; // Or any other value

        ValueProducer producerMock = mock(ValueProducer.class);
        when(producerMock.getValue(value)).thenReturn(returnMock);

        int actual = Doubler.doubleThatResult(producerMock, value);

        verify(producerMock);
        assertEquals(26, actual);
    }
}

关于java - 同时使用 junit 断言和 mockito 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906784/

相关文章:

java - 如何?编写 Android 应用程序代码以将用户的位置设置更改为关闭?

java - 数组适配器 : Remove by Index

android - Robolectric Android- 在 editTextField 上测试输入

java - JUnit 中的参数化测试

java - 如何 stub 用@InjectMocks 注释的类的方法?

java - 我将如何使用 Junit 测试这个简单的方法?

java - 如何模拟/ stub jOOQ UpdatableRecordImpl store() 方法?

java - 删除所有空行

java - 在测试类中模拟私有(private)静态最终变量

java - 我想模拟一个扩展InputStream的专有类,模拟读取,验证关闭