所以我在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}意味着期望4和2中的4作为参数提供给Operation类中的add方法...我猜这个可能不是正确的方法......
我很感激你的见解。
答案 0 :(得分:2)
你没有在任何地方使用expected
- 甚至没有让它成为班级状态的一部分。你的断言在这里:
assertTrue(value == o.add(value, num));
...没有断言你想要它。只有在num
为0时它才会起作用。仔细看看。
你应该:
// final is optional here, of course - but that's what I'd do, anyway :)
private final int expected;
private final int value;
private final int num;
public OperationTest(int expected, int value, int num) {
this.expected = expected;
this.value = value;
this.num = num;
}
然后:
assertTrue(expected == o.add(value, num));
或更好(更清晰的诊断):
assertEquals(expected, o.add(value, num));
答案 1 :(得分:2)
考虑到value == value + number
和value
为零(我们可以通过查看您的测试数字看到),number
如何才能成真?你在逻辑上显然错过了一些简单的东西。我想你需要一个表达预期结果的第三个参数,所以你可以这样做:
expected == o.add(value, number);