<分区>
我是第一次编写 Junit 测试,并且是 Mockito 框架的新手。
在用 Java 编写 Junit 测试时,使用 Mockito.mock()
比使用 new
运算符创建实例有何优势?
<分区>
我是第一次编写 Junit 测试,并且是 Mockito 框架的新手。
在用 Java 编写 Junit 测试时,使用 Mockito.mock()
比使用 new
运算符创建实例有何优势?
最佳答案
Mockito 可用于注入(inject)当前测试上下文中可能不存在的依赖项,而不是创建用于测试的“虚拟”对象。这些模拟对象不是真实的东西,而是模拟类的“空”版本,您可以在其上运行 Mockito 提供的各种行为模拟和结果验证方法。
例如下面的类:
class Thing {
//Some external Dependency which provides the method 'int doWork()'
private Dependency dependency;
private int value;
public void setDependency(Dependency dependency) {
this.dependency = dependency;
}
public int getValue() {
return value;
}
// Calculates something depending on the provided amount.
public void calculate(int amount) {
for(int i = 0; i < amount; i++) {
value += dependency.doWork();
}
}
}
然后你可以在你的测试中做这样的事情:
@Test
public void should_calculate_five_times() {
// Create mock object
Dependency dependencyMock = Mockito.mock(Dependency.class);
// Simulate the behaviour of the mock object
Mockito.when(dependencyMock.doWork()).thenReturn(2);
// Create object under test
Thing thingToTest = new Thing();
// Inject mock object
thingToTest.setDependency(dependencyMock);
// Execute method to test
thingToTest.calculate(5);
// Expected: dependency.doWork() should have been called 5 times
Mockito.verify(dependencyMock, Mockito.times(5)).doWork();
// Since dependencyMock returns 2, when doWork() is called, value should be 10
Assert.assertEquals(10, thingToTest.getValue());
}
关于java - 在编写 Junit 测试时,Mockito.mock 比使用 new 有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40215963/