我使用工厂模式。我有3种货币:美元,RON和欧元。在每本类的我有同样的功能,打印,不同的输出:如何测试在jUnit的控制台上打印的void方法?
public void print() {
System.out.println("I printed dollars!");
}
public void print() {
System.out.println("I printed euro!");}
在我的工厂类,我有回到货币类型的新对象的方法:
public Valuta getValuta(String numeValuta){
if(numeValuta == null){
return null;
}
if(numeValuta.equalsIgnoreCase("dolar")){
return new Dolar();
}
if(numeValuta.equalsIgnoreCase("euro")){
return new Euro();
}
if(numeValuta.equalsIgnoreCase("lei")){
return new Lei();
}
return null;
}
现在,在我的测试类,我试过这个:
FabricaBani fabrica = new FabricaBani();
Valuta valuta = fabrica.getValuta("dolar");
valuta.tipareste();
assertEquals("I printed dollars!", valuta.print());
我得到一个错误,说我不能测试一个字符串与void。我试过在valuta.print之后放入.toString,但我不允许。
基本上,你已经编写了很难测试的代码。例如,如果您改变类来覆盖'toString()',或者让'print'接受'Writer',那么测试起来会更容易。 –
尝试在'System.out.println()'之后的'print()'方法中返回字符串值。你的断言将使用返回值并将其输出到控制台输出。 – Kapcash
@Jon Skeet对不起,但我不理解你。你能更具体一点吗? –