我有以下代码,我不知道如何测试它。
我试图访问计数 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");
}
}
正确的方法是提取一个计算contD
值的方法并对其进行测试。
public void listarD() {
int contD = calculateContD();
if (contD == 0) {
...
}
}
然后你可以测试这个calculateContD()
方法。
一个设计良好的方法应该易于测试,你不能测试你的方法这一事实是设计缺陷的证据。
一些建议:
- 使方法的结果可验证(这可能意味着它是不再无效(。
- 将输出保留在永久存储(如磁盘(上或数据库。
理论上有一种方法可以测试这一点:可以更改System.out后面的对象。
因此,从理论上讲,您可以将"特殊"输出流放入System.out;运行void方法;然后检查您期望的消息...出现在你的那条溪流中。
但这根本没有多大意义:你看,在现实世界中,你很少打印到system.out。在现实世界中,您的方法
- 返回一个值
- 对其他对象进行调用
- 更改封闭对象/类的某些内部状态
因此:在现实世界中,您编写的测试关心此类事件。
所以,正如你自己想的那样;真正的答案是改变你的void方法的行为;通过返回它已经计算的值!
一般来说,只能通过人眼验证的功能不是一个好的设计。调用方永远不会知道调用函数后发生了什么。返回值或表示结果的异常总比没有好。