我有一个Mockito问题。用mockito进行单元测试(部分模拟)
是否有可能做这样的事情:
ClassX x = mock(ClassX.class)
when(x.methodB()).thenReturn("toto");
String result = x.methodA();
我与1.7的Mockito工作。
我看到有一个“间谍”的系统,但他们说这是不建议在我们测试的项目使用它(为什么?)...
反正我试过,间谍功能,但我得到一个奇怪的行为。
检查什么,我想做的事:
真正的代码:
String methodA(String arg) {
return this.methodB(arg);
}
String methodB(String arg) {
return "toto";
}
测试代码:
@Test
public void testTest() {
final ClassX x = spy(new ClassX());
final String argument = "arg";
doReturn("good").when(helper).methodB(argument);
assertTrue( x.methodB(argument).equals("good"));
assertTrue( x.methodA(argument).equals("good"));
}
正如他们说我避免了当thenReturn语法,可能是一个问题一个间谍(但它也不管用)
奇怪的是: assertTrue(x.methodB(argument).equals(“good”)); 是好的
只有第二个 assertTrue(x.methodA(argument).equals(“good”)); 也不行
其实helper.methodA(参数)返回“TOTO” - >真正的结果,而不是模拟结果
这是不可能告诉给的Mockito在这种情况下返回“好”? ??看来当测试类调用methodB没关系,但如果间谍调用方法B的方法,它不会工作了...
我不知道该怎么办...是这样一个奇怪的要单元测试同一个类的两个方法,并使测试彼此独立,这样一个着名的模拟测试框架不会实现这个基本功能?这不就是我们所说的真正的单元测试吗?不明白为什么他们说要避免使用间谍方法的测试对象...
感谢
刚刚用Mockito 1.9.5试了一下,两个都返回了''好的'''。所以我想这种行为已经消失了。 – acdcjunior 2013-08-13 18:50:44