模拟方法没有被调用 - java
我是Mockito新手,请帮助理解基本。模拟方法没有被调用 - java
根据我上面的代码应该打印5时mocked.add(6,7)
得到调用,但add()
方法没有被调用和代码打印0 ..为什么?这个代码的任何解决方案?
import org.mockito.Mockito;
import static org.mockito.Mockito.*;
class Calc{
int add(int a,int b){
System.out.println("add method called");
return a+b;
}
}
class MockTest{
public static void main(String[] args) {
Calc mocked=mock(Calc.class);
when(mocked.add(2,3)).thenReturn(5);
System.out.println(mocked.add(6,7));
}
}
为了得到个结果,你必须通过精确的PARAMS当您设置when..then作为。否则的Mockito会返回一个“默认”值(整数0:
值都嘲笑默认情况下,什么样的回报
为了透明和不引人注目所有的Mockito嘲笑由 默认返回“好“值。例如:。零,falseys,空 集合或空值参考的javadoc约磕碰,看看到底 默认情况下返回什么值
如果你想返回5的任意整数,然后使用:
when(mocked.add(Mockito.any(Integer.class),Mockito.any(Integer.class))).thenReturn(5);
“模拟”只是一个空虚拟对象,它模拟“真实”对象的行为。如果您定义类似when(mocked.add(2,3)).thenReturn(5);
的行为,那么当您收到这些确切的值时,您可以具体说明该模拟该做什么。
mocked.add(6,7)
将在此时返回0
,因为你还没有定义其行为的价值,因此使用默认值。因此,如果您想要涵盖所有可能的输入,可以使用@MaciejKowalski发布的解决方案,并使用像Mockito.any(Integer.class)
这样的通用匹配器。
我仍然不清楚如何正确处理嘲笑。 Mock是一种向被测系统提供外部依赖的方法,无需设置整个依赖关系树。通常不会调用该类中的真正方法。这就是when(mocked.add(2,3)).thenReturn(5);
的意思。它告诉模拟行为像真正的依赖关系,没有真正的依赖。
一个例子可能是这样的:
public class TestClass {
private ExternalDependency dep;
public void setDep(ExternalDependency dep) {
this.dep = dep;
}
public int calculate() {
return 5 + dep.doStuff();
}
}
public class ExternalDependency {
public int doStuff() {
return 3;
}
}
现在,在您的测试代码,你可以使用嘲笑这样的:
@Test
public void should_use_external_dependency() {
// Aquire a mocked object of the class
ExternalDependency mockedDep = Mockito.mock(ExternalDependency.class);
// Define its behaviour
Mockito.when(mockedDep.doStuff()).thenReturn(20);
TestClass sut = new TestClass();
sut.setDep(mockedDep);
// should return 25, since we've defined the mocks behaviour to return 20
Assert.assertEquals(25, sut.calculate());
}
如果sut.calculate()
被调用时,在ExternalDependency
的方法不应该是真的称为,它委托给嘲弄的存根对象。但是,如果你要拨打的真正类的真正方法,你可以使用一个间谍,而不是与Mockito.spy(ExternalDependency.class)
或者你可以做到这一点与when(mockedDep.doStuff()).thenCallRealMethod();
你的问题是没有意义的我。你明确地说mockito“当参数是2和3,然后返回5”,然后你传递6和7 ...为什么mockito应用该规则,如果前提条件不满足? – Tom