Java 尝试使用Junit验证控制台输出是否与字符串匹配
我试图使用Junit来验证方法输出的内容是否与使用assertequals的字符串匹配,但我无法让它工作。因为它说(String,Void)的测试用例是未定义的,所以我的方法代码如下Java 尝试使用Junit验证控制台输出是否与字符串匹配,java,junit,Java,Junit,我试图使用Junit来验证方法输出的内容是否与使用assertequals的字符串匹配,但我无法让它工作。因为它说(String,Void)的测试用例是未定义的,所以我的方法代码如下 public void speciesInformation() { switch (species){ case"Penguin":System.out.println("Penguin Trivia fact"); break; default: System.ou
public void speciesInformation() {
switch (species){
case"Penguin":System.out.println("Penguin Trivia fact");
break;
default: System.out.println("There is no current information for that species");
break;
}
}
我尝试使用的junit代码是(省略了其他测试):
我所有的其他测试都是基于返回的,但是这个测试应该基于public void方法打印的内容,我不知道怎么做,也找不到关于如何做的信息。你可以使用
ByteArrayOutputStream
来实现这一点,在系统中设置的新打印流
,然后您可以轻松地断言控制台中记录的内容
一般来说,断言某些东西并不总是容易的,特别是当它们是静态方法时
在这种情况下,您可以为系统设置另一个流
然而,如果我们谈论一般的测试,您应该问自己:“我真正需要测试什么?”实际上,您可能想测试打印的字符串是否正确,对吗?因此:
至少有印刷的东西吗
打印的字符串是否为预期的字符串
您可以使用前面提到的工具检查第二个方法—断言方法的正确性,返回字符串。为此,您可以稍微重构一下您的方法:
public void speciesInformation() {
System.out.println(getSpeciesInforationText(species));
}
public void getSpeciesInforationText(String species) {
switch (species){
case"Penguin":
return "Penguin Trivia fact");
default:
return "There is no current information for that species");
}
}
通过这种方式,您可以轻松测试getspeciesformationtext
的正确性
第一种方法变得非常简单-您只需在那里调用print
方法。因此,您要么不能全部测试(因为它非常简单),要么可以使用一种称为Mocking的技术来测试您调用的方法。但这需要你方采取更多的行动。如果您对它感兴趣,请查看什么是Mockito
,以及如何使用它
public void speciesInformation() {
System.out.println(getSpeciesInforationText(species));
}
public void getSpeciesInforationText(String species) {
switch (species){
case"Penguin":
return "Penguin Trivia fact");
default:
return "There is no current information for that species");
}
}