我已经完成了一个正在从事的大型项目的开发。我通常在没有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]>
我的问题是,如果它们显示相同的输出,为什么会失败?
答案 0 :(得分:3)
您是否尝试过调试并查看其区别?
我的猜测-在开头(从您的代码)和结尾(您在使用\n
)都缺少println
。
这应该起作用: assertEquals(“ \ nUser:Charlie Ansell已成功添加\ n”,outContent.toString());
答案 1 :(得分:2)
尽管内容看起来很相似,但是程序中有额外的换行符(\n
),您的换行符没有包含在测试中。
替换:
assertEquals(“用户:Charlie Ansell已成功添加”,outContent.toString());
具有:
assertEquals(“ \ n用户:Charlie Ansell已成功添加\ n”,outContent.toString());
答案 2 :(得分:0)
好的,所以我才找到答案。
我在预期对象和实际对象的末尾添加了$ ping repo1.maven.org
函数。所以我的新代码如下:
.trim()
基于此,我的假设是两个输出中都有空格,感谢所有评论者,我感谢您的帮助