Java Junit在预期和实际情况相同时失败?
我已经完成了一个我一直在做的大项目。我通常在没有Junit的情况下进行自己的测试,但我的要求是现在就使用它。我想测试的所有方法都是无效的,不会返回任何内容,而是根据某些因素打印信息。因此,我需要使用Junit的assertEquals
方法来测试这些
例如:
public void addContact(String firstName,String lastName,Person p) {
String key = firstName.substring(0,1).toUpperCase() + firstName.substring(1).toLowerCase() + " ".concat(lastName.substring(0,1).toUpperCase() + lastName.substring(1).toLowerCase());
if(hasContact(key)){
System.out.println("\nCannot add user. User already exists. Try adding distinct name to diffentiate between users with the same name");
}
else{
this.contacts.put(key,p);
System.out.println("\nUser: " + key + " Successfully added");
}
}
这是我想从AddressBook类中测试的void方法之一,现在,我正在测试是否可以添加用户,以便它可以打印它所做的\nUser: " + key + " Successfully added
在我的JUNIT测试类中,我正试着这样检查它
@Test
public void addContact(){
final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
Address a1 = new Address("grove","Waterford","Waterford","x9123r","0987654321");
Person p1 = new Person("Charlie","Ansell",a1);
System.setOut(new PrintStream(outContent));
ad1.addContact("Charlie","Ansell", p1);
assertEquals("User: Charlie Ansell Successfully added", outContent.toString());
}
Junit的输出是:expected:<[User: Charlie Ansell Successfully added]> but was <[User: Charlie Ansell Successfully added]>
我的问题是,如果它们显示相同的输出,为什么会失败
# 1 楼答案
尽管内容看起来很相似,但在程序中有额外的换行符(
\n
),这些换行符并没有包含在测试中替换:
与:
# 2 楼答案
您是否尝试过调试它并查看其差异
我的猜测-在开头(从代码中)和结尾(正在使用
println
)都缺少\n
这应该起作用: assertEquals(“\n用户:Charlie Ansell已成功添加\n”,outContent.toString())
# 3 楼答案
好的,我刚刚找到了答案
我在预期对象和实际对象的末尾添加了
.trim()
函数。因此,我的新代码如下所示:我的假设是,这两个输出中都有空白,感谢所有评论,我感谢您的帮助