如何在TestNG中使用DbUnit

4

我需要将DbUnit与TestNG集成。

1) DbUnit基本上是JUnit的扩展,那么能否在TestNG中使用DbUnit?
2) 如果可以,应该如何做?

3个回答

2

终于找到了一种使用TestNG与DbUnit结合的方法!

使用IDatabaseTester的实例是可行的,

但另一个解决方法是: 扩展AbstractDatabaseTester并实现getConnection并覆盖必要的函数。 但重要的一点是在测试之前和之后调用onSetup()和onTeardown()。

希望这有所帮助……


1

不确定您想要做什么,但也许 Unitils 会有所帮助。它类似于 dbunit 扩展,但不限于此,并支持与 TestNg 集成(通过扩展 UnitilsTestNG 类来进行测试用例)。


也许您可以提供更具体的场景来说明您想要做什么。对我来说,dbunit 用于准备测试数据库状态,而 Unitils 用于管理和简化 dbunit 特定的配置(如每个测试的数据集),无论使用 JUnit 还是 TestNg 都应该能够正常工作。如果您想直接与 TestNG 一起使用 DbUnit,而不是其他东西,您可能需要注意以下问题:sourceforge.net/support/tracker.php?aid=1897627,并准备好 DbUnit 在某些方面将使用 JUnit。 - prusswan
我需要在TestNG中使用DbUnit,因为DbUnit扩展了JUnit,我不确定如何操作。目前,我正在使用IDatabaseTester实例代替扩展DbTestCase类,这是正确使用DbUnit在TestNG中的方式吗? - user764974
我对此无法发表太多评论,因为我自己不使用TestNg(并且通过Unitils管理大部分dbunit配置),但是在查找后,我意识到http://www.dbunit.org/howto.html#noextend已经解决了这个问题:您只需要找出要扩展的TestNg测试类以及TestNg的before和after方法,并插入IDatabaseTester所需的必要连接(示例使用JdbcDatabaseTester)。 - prusswan

0
这里是一个执行所需功能的简单类。
public class SampleDBUnitTest {

    IDatabaseTester databaseTester;
    IDataSet dataSet;

    @BeforeMethod
    public void setUp() throws Exception {
        // These could come as parematers from TestNG 
        final String driverClass = "org.postgresql.Driver";
        final String databaseUrl = "jdbc:postgresql://localhost:5432/database";
        final String username = "username";
        final String password = "password";

        dataSet = new FlatXmlDataSet(Thread.currentThread().getContextClassLoader().getResourceAsStream("dataset.xml"));
        databaseTester = new JdbcDatabaseTester(driverClass, databaseUrl, username, password);
        databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
        databaseTester.setDataSet(dataSet);
        databaseTester.setTearDownOperation(DatabaseOperation.NONE);
        databaseTester.setDataSet(dataSet);

        databaseTester.onSetup();
    }

    @AfterMethod
    public void tearDown() throws Exception {
        databaseTester.onTearDown();
    }

    @Test
    public void t() throws Exception {
        // Testing, testing
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接