java JUnit测试返回null和false
所以我在JUnit中练习参数化测试。我创建了这个类:
public class Operation {
public Operation() {
}
public int add(int value, int num) {
int ans = value + num;
return ans;
}
public int subtract(int value, int num) {
int ans = value - num;
return ans;
}
}
没什么特别的,只是一些运行测试的方法
我在这里有一个测试班:
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class OperationTest {
private int value;
private int num;
public OperationTest(int expected, int value, int num) {
this.value = value;
this.num = num;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 4, 2, 2 },
{ 66, 6, 60 },
{ 20, 19, 1 },
{ 82, 22, 50 },
{ 103, 23, 80 }
});
}
@Test
public void test() {
Operation o = new Operation();
assertTrue(value == o.add(value, num));
}
}
最后,我有一个类来运行我的测试:
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(OperationTest.class);
for(Failure f : result.getFailures()) {
System.out.println(f.toString());
}
System.out.println(result.wasSuccessful());
}
}
运行此操作时,输出为:
test[0](OperationTest): null
test[1](OperationTest): null
test[2](OperationTest): null
test[3](OperationTest): null
test[4](OperationTest): null
false
我希望所有这些都是真的,因为{4,2,2}意味着从2和2中期望4,这是作为操作类中add方法的参数给出的。。。我猜这可能不是正确的方法
我将非常感谢你的洞察力
# 1 楼答案
您没有在任何地方使用
expected
,甚至没有将其作为类状态的一部分。你在这里的断言:。。。不是在断言你想要它做什么。它只有在
num
为0时才起作用。仔细看你应该:
然后:
或者更好(更清晰的诊断):
# 2 楼答案
如果
value
或number
为零(我们可以通过查看您的测试编号看到),那么value == value + number
怎么可能是真的?你显然错过了一些简单的逻辑。我想您需要第三个参数来表示预期结果,因此您可以执行以下操作: