我在这里了解Mockito框架中发生了什么问题。我有以下类了解Mockito框架下发生了什么
Model类
public class KeyValueImpl{
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
“商业逻辑” 类
public class ValueFinder {
public KeyValueImpl findValueForKey(KeyValueImpl keyValue){
keyValue.setValue("foo");
return keyValue;
}
}
的实用工具类返回预期的结果(会被嘲笑)
public class ExpectationManager {
public String getExpectedValue(){
return "loremipsumdolorem";
}
}
测试
public class ValueFinderTest {
@Test
public void testMocked() {
KeyValueImpl keyValue = Mockito.mock(KeyValueImpl.class);
keyValue = (new ValueFinder()).findValueForKey(keyValue);
ExpectationManager expectationManager = Mockito.mock(ExpectationManager.class);
when(expectationManager.getExpectedValue()).thenReturn("somethingDifferentToFoo");
String expectedValue = expectationManager.getExpectedValue();
verify(keyValue).setValue(expectedValue); //fails, expects "foo" but gets "somethingDifferentToFoo" -> ok
verify(keyValue).setValue(expectationManager.getExpectedValue()); //no error, but why?
}
}
有趣的事情发生在测试类的最后一排:
verify(keyValue).setValue(expectationManager.getExpectedValue()); //no error, but why?
我当然希望像行中相同的行为上面
verify(keyValue).setValue(expectedValue); //fails, expects "foo" but gets somethingDifferentToFoo" -> ok
不过的Mockito让我相处它。任何解释?
您的'ValueFinder'类完全不使用'ExpectationManager',那么为什么这会涉及到您的测试?你究竟想在这里测试什么? – 2014-10-17 10:23:22
我在我的Test类中使用它。 expectationManager返回我在我的验证方法中使用的值。在这个例子中,为了简单起见,所有的东西都被简化了。 – Paul 2014-10-17 10:34:24
嗯,但是为什么 - 是不是你正在测试你的*生产*代码?你说你会嘲笑ExpectationManager ...当你开始嘲笑那些只在那里进行测试的类时,这听起来对我来说是非常错误的...... – 2014-10-17 10:35:55