我有以下代码,我不知道如何测试它。
我试图访问count contD ++,如果我有3个底片。
我不能用这样的assertEquals(contD,3)
public void listarD() {
int contD = 0;
for(int i=0; i< clientes.length; i++) {
if(clientes[i].getSaldo() < 0) {
System.out.println(
"Cliente: " + clientes[i].getNombre() +
". Saldo: " + clientes[i].getSaldo());
contD++;
}
}
if (contD == 0) {
System.out.println("No hay descubiertos :D");
}
else {
System.out.println("TOTAL DESCUBIERTOS: " + contadorDescubiertos + " clientes");
}
}
答案 0 :(得分:3)
正确的方法是提取一个计算contD
值并测试它的方法。
public void listarD() {
int contD = calculateContD();
if (contD == 0) {
...
}
}
然后你可以测试这个calculateContD()
方法。
答案 1 :(得分:3)
设计良好的方法应该易于测试,无法测试方法的事实是设计缺陷的证据。
一些建议:
答案 2 :(得分:2)
有一种方法可以理论上测试这个:一个可以更改 System.out后面的对象。
所以,理论上,你可以放一个特殊的&#34; OutputStream进入System.out;运行你的void方法;然后检查您期望的消息......显示在您的流中。
但这根本没有意义:你知道,在现实世界中,你很少打印到system.out。在现实世界中,你的方法要么
因此:在现实世界中,您编写关注此类事件的测试。
所以,正如你自己想的那样;真正的答案是改变你的void方法的行为;通过返回它已计算的值!
答案 3 :(得分:0)
一般来说,只能用人眼验证的功能并不是一个好的设计。呼叫者永远不会知道他们打电话给你的功能后发生了什么。返回值或表示结果的异常都比没有好。