0

以下是一个测试org.dbunit.Assertion.assertEquals(ITable a, ITable b)工作的测试用例

@Test
public void testAssertion() {
    try {
        //Creating actual table with 2 columns
        DefaultTable actual = new DefaultTable("table_name",
                new Column[] { new Column("col1", DataType.INTEGER),
                        new Column("col2", DataType.VARCHAR) });
        actual.addRow(new Object[] { 1, "ABCD" });
        actual.addRow(new Object[] { 2, "BABCD" });
        actual.addRow(new Object[] { 3, "CCGF" });

        //Creating expected table with same 2 columns
        DefaultTable expected = new DefaultTable(expected
                .getTableMetaData());
        expected.addRow(new Object[] { 1, "ABCD" });
        expected.addRow(new Object[] { 2, "BBCD" });

        // Check the actual vs expected
        Assertion.assertEquals(actual, expected);
        //This should return a test failure since actual & expected are different.
        //But its not throwing any test case failure.
    } catch (DataSetException e1) {
        e1.printStackTrace();
    } catch (DatabaseUnitException e) {
        e.printStackTrace();
    }
}

这里两个 DefaultTable 的值都不匹配,但 JUnit 仍然没有失败上述测试用例。我从 Eclipse 运行它,它在测试用例下导致 0 次错误和 0 次失败和无根测试,如下所示,

    testAssertion [Runner: JUnit 4]
[+] Unrooted Tests [Runner: JUnit 4]

我调试了 DBUnit API,它根据需要抛出数据不匹配异常,但最后从 SpringJUnit4ClassRunner 返回时,它不会作为测试用例失败抛出。

我想我在这里缺少一些东西。请纠正我或让我知道解决方案。预先感谢。

4

1 回答 1

-1

断言是 DBUnit 抛出 AssertionError。

我发现获得确切异常原因的最佳方法是捕获它,例如:-

try
{
     Assertion.assertEquals( expectedTable, actualTable );
}
catch ( AssertionError e )
{
     logger.error( "Assertion failed with error : " + e.getMessage());
}
于 2015-04-03T09:38:23.183 回答