无法使用 JUnit 打印测试用例中的所有测试结果
Unable to print all test results in a testcase using JUnit
我写了一个 TestCase
使用 Runner
class 来打印结果。但是当我尝试打印结果时,我只得到第一个结果,而不是 TestCase
.
的所有 failures/results
我的测试用例class如下:
public class Fixtures_JavaTest extends TestCase{
protected int value1, value2;
public Fixtures_JavaTest(String str) {
super(str);
}
@Override
protected void setUp() throws Exception {
value1 = 2;
value2 = 5;
}
public void testAdd() {
assertEquals(7, 8);
assertEquals(4, 8);
assertEquals(3, 8);
assertEquals(2, 2);
}
}
我的跑者class如下:
public class Runner_Fixtures_JavaTest {
public static void main(String[] args) {
TestCase test = new Fixtures_JavaTest("add") {
public void runTest() {
testAdd();
}
};
TestResult result = test.run();
Enumeration<TestFailure> failures = (Enumeration<TestFailure>) result.failures();
while(failures.hasMoreElements()) {
System.out.println(failures.nextElement());
}
}
}
我只得到以下结果
add(Runner_Fixtures_JavaTest): expected:<7> but was:<8>
为什么我没有得到以下 assertEqual
方法的输出?
assertEquals(4, 8);
assertEquals(3, 8);
assertEquals(2, 2);
JUnit 测试是快速失败测试。第一个失败的断言将导致测试失败,并且不会继续执行。如果要测试所有断言,可以使用参数化测试。例如:
@RunWith(Parameterized.class)
public class Fixtures_JavaTest {
private int value1;
private int value2;
public Fixtures_JavaTest(int value1, int value2) {
this.value1 = value1;
this.value2 = value2;
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{7, 8}, {4, 8}, {3, 8}, {2, 2}
});
}
@Test
public void testAdd() {
assertEquals(value1, value2);
}
}
注:
问题中的原始代码和这段代码都测试了两个硬编码值之间的相等性,而不是实际实现中的任何逻辑,因此它们的值有些可疑。
本例只是展示如何将题中的代码转换为参数化测试,并没有处理任何逻辑变化。
我写了一个 TestCase
使用 Runner
class 来打印结果。但是当我尝试打印结果时,我只得到第一个结果,而不是 TestCase
.
我的测试用例class如下:
public class Fixtures_JavaTest extends TestCase{
protected int value1, value2;
public Fixtures_JavaTest(String str) {
super(str);
}
@Override
protected void setUp() throws Exception {
value1 = 2;
value2 = 5;
}
public void testAdd() {
assertEquals(7, 8);
assertEquals(4, 8);
assertEquals(3, 8);
assertEquals(2, 2);
}
}
我的跑者class如下:
public class Runner_Fixtures_JavaTest {
public static void main(String[] args) {
TestCase test = new Fixtures_JavaTest("add") {
public void runTest() {
testAdd();
}
};
TestResult result = test.run();
Enumeration<TestFailure> failures = (Enumeration<TestFailure>) result.failures();
while(failures.hasMoreElements()) {
System.out.println(failures.nextElement());
}
}
}
我只得到以下结果
add(Runner_Fixtures_JavaTest): expected:<7> but was:<8>
为什么我没有得到以下 assertEqual
方法的输出?
assertEquals(4, 8);
assertEquals(3, 8);
assertEquals(2, 2);
JUnit 测试是快速失败测试。第一个失败的断言将导致测试失败,并且不会继续执行。如果要测试所有断言,可以使用参数化测试。例如:
@RunWith(Parameterized.class)
public class Fixtures_JavaTest {
private int value1;
private int value2;
public Fixtures_JavaTest(int value1, int value2) {
this.value1 = value1;
this.value2 = value2;
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{7, 8}, {4, 8}, {3, 8}, {2, 2}
});
}
@Test
public void testAdd() {
assertEquals(value1, value2);
}
}
注:
问题中的原始代码和这段代码都测试了两个硬编码值之间的相等性,而不是实际实现中的任何逻辑,因此它们的值有些可疑。
本例只是展示如何将题中的代码转换为参数化测试,并没有处理任何逻辑变化。