我已经为我的测试用例设置了@Before
r = RentACat.createInstance();
c1 = Mockito.mock(Cat.class);
Mockito.when(c1.getId()).thenReturn(1);
Mockito.when(c1.getName()).thenReturn("Jennyanydots");
c2 = Mockito.mock(Cat.class);
Mockito.when(c2.getId()).thenReturn(2);
Mockito.when(c2.getName()).thenReturn("Old Deuteronomy");
我的测试用例为
r.addCat(c1);
r.addCat(c2);
r.addCat(c3);
//Execution Steps
String ret = r.listCats();
//Postconditions
assertEquals("Return string is not equal to expected string with added cats", "ID 1. JennyanydotsnID 2. Old Deuteronomy", ret);
这是我实现的listCats();
public String listCats() {
// TODO
StringBuilder retBuild = new StringBuilder();
for(Cat c : cats) {
if(c.getRented() == false) {
retBuild.append(c.toString());
retBuild.append("n");
}
}
return retBuild.toString();
}
然而,当我运行这个测试用例时,我得到一个空字符串的返回值。我尝试了一些事情,比如改变我的实现listCats();
这样
public String listCats() {
// TODO
StringBuilder retBuild = new StringBuilder();
for(Cat c : cats) {
if(c.getRented() == false) {
retBuild.append(c.toString());
retBuild.append("n");
return retBuild.toString();
}
}
return retBuild.toString();
}
然而,当我运行这个时,我只得到一只猫,正如预期的那样,观察值为"Mock for Cat, hashCode: 10523xyz"
我在listCats()
方法中做错了什么?
是的,因为您还需要在模拟对象中定义toString()
行为。您看到的字符串是模拟对象的默认toString
版本。你可以像下面这样定义你的。
Mockit.when(c1.toString()).thenReturn("Jennyanydots");
Mockit.when(c2.toString()).thenReturn("Old Deuteronomy");
注意:如果Cat
类只是带有getter/setter的POJO对象,则无需模拟它,只需从数据中填充任何您想要的内容