java - 使用 Mockito 的测试用例未返回预期的字符串值
问题描述
我在这里为我的测试用例设置了@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. Jennyanydots\nID 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 对象,则无需模拟它,您只需从数据中填充您想要的任何内容
推荐阅读
- azure - 是否可以使用部分电子邮件地址在 Azure AD 中搜索用户
- typescript - 打字稿函数/回调类型:分配具有“错误”返回值的函数时没有错误
- linux - 如何在终端上将二进制文本转换为 ASCII?
- java - 带有 GUI 的 Java 中的计时器
- python - 使用 python 从 Firebase 存储下载文件链接
- asp.net - 在 ASP.Net 应用程序中使用多个表单标签时会发生什么?
- javascript - 在没有console.log的情况下登录vuejs
- ibm-watson - IBM Watson Visual Recognition Text Prebuilt 模型
- distributed - StreamSets 中的分布式执行
- mapbox-gl-js - 如何在 Mapbox GL JS 中结合基于特征状态和属性的填充颜色?