我正在测试我的计算器的功能:
//Calculator.java (伪)
参数1: int
参数2: int
参数3:随机数生成器
示例:parameter1 (random parameter 3) parameter2
现在,由于参数3(随机),我在断言中遇到了问题。
我不能在assert中输入静态值,我需要先获取random的值。帮助
发布于 2018-03-25 16:19:38
您可以在Calculator类中提供一个getter来检索所使用的操作符,但这是一种有限的方法,因为您将在对象状态中提供信息。
因此,它将始终返回最后使用的运算符。
它不是线程安全的,而且在calculate()方法中抛出异常的情况下,如果你不给它赋值,表明上一次计算失败了,你可能会感到惊讶。
作为替代,您可以返回一个包装结果( int )和有效使用的运算符的对象,而不是返回一个整数。
请注意,单元测试必须涵盖calculate()方法的所有可能场景。
由于所用运算符的随机性,保证所有场景都被测试是不直接的。
您应该打开被测试方法的API以选择要使用的运算符(打破随机性以进行可重复的测试),或者在您的测试方法中根据需要对被测试方法执行尽可能多的调用,直到覆盖所有情况为止。
发布于 2018-03-25 16:33:11
您在calculate方法中定义了int operator。此变量的作用域仅在此块内。
public class Calculate {
public int calculate(int a, int b) {
int operator = randomise(4);
switch (operator) {
case 0:
return add(num1, num2);
case 1:
return multiply(num1, num2);
case 2:
return subtract(num1, num2);
case 3:
return divide(num1, num2);
default:
return 0;
}
}
}正如davidxx所说,您可以在Calculator类中提供一个getter来检索操作符:
public class Calculate {
private int operator;
public int calculate(int a, int b) {
operator = randomise(4);
switch (operator) {
case 0:
return add(num1, num2);
case 1:
return multiply(num1, num2);
case 2:
return subtract(num1, num2);
case 3:
return divide(num1, num2);
default:
return 0;
}
}
public int getOperator()
{
return operator;
}
}或者使用他提出的替代方案。
发布于 2018-03-26 01:58:15
对于您预期的结果,您希望知道所使用的(随机)运算符。这意味着你的测试实际上是同时测试两件事:
从理论上讲,这导致了无限数量的测试用例。
您似乎还使用了自定义方法: add(num1,num2);multiply(num1,num2);等等。因此:
接口: assertEquals(int expected,int actual)表示代码应该是'expected =‘,而不是'actual =’,然后是assertEquals(expected,resultCalculate);
https://stackoverflow.com/questions/49473669
复制相似问题