微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用 JUnit 在测试用例中打印所有测试结果

如何解决无法使用 JUnit 在测试用例中打印所有测试结果

我已经使用 TestCase 类编写了一个 Runner 来打印结果。但是当我尝试打印结果时,我只得到第一个结果,而不是 TestCase 的所有失败/结果。

我的 TestCase 类如下:

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);

    }
    
    
}

我的跑步课程如下:

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$1): 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,{3,{2,2}
        });
    }    

    @Test
    public void testAdd() {
        assertEquals(value1,value2);
    }
}

注意:
问题中的原始代码和此代码都测试两个硬编码值之间的相等性,而不是实际实现中的任何逻辑,因此它们的值有些可疑。
此示例仅展示如何将问题中的代码转换为参数化测试,不处理任何逻辑更改。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。