Junit 如何在TestNG中使用DbUnit

Junit 如何在TestNG中使用DbUnit,junit,testng,dbunit,Junit,Testng,Dbunit,我需要将DbUnit与TestNG集成 1) 是否可以将DbUnit与TestNG一起使用,因为DbUnit基本上是JUnit的扩展。 2) 如果是,怎么做?不确定您到底想做什么,但可能会有所帮助。它类似于dbunit扩展,但不限于此,并且支持与TestNg的集成(通过为您的测试用例扩展unitiltestng类)。最后我找到了一种将dbunit与TestNg结合使用的方法 使用IDatabaseTester works的实例 但另一个解决办法是: 扩展AbstractDatabaseTeste

我需要将DbUnit与TestNG集成

1) 是否可以将DbUnit与TestNG一起使用,因为DbUnit基本上是JUnit的扩展。

2) 如果是,怎么做?

不确定您到底想做什么,但可能会有所帮助。它类似于dbunit扩展,但不限于此,并且支持与TestNg的集成(通过为您的测试用例扩展unitiltestng类)。

最后我找到了一种将dbunit与TestNg结合使用的方法

使用IDatabaseTester works的实例

但另一个解决办法是: 扩展AbstractDatabaseTester并实现getConnection和重写必要的函数。 但一件重要的事情是在测试前后调用onSetup()和onTeardown()


希望这有助于…

这里有一个执行所需函数的简单类

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
    }
}

也许你可以提供你想做的更具体的场景。对我来说,dbunit用于准备测试数据库状态,而UnitIL用于管理和简化dbunit特定的配置(如每个测试的数据集),无论使用JUnit还是TestNg,这些配置都应该有效。如果您想直接在TestNG中使用DbUnit,而不是其他任何东西,您可能需要注意以下问题:sourceforge.net/support/tracker.php?aid=1897627,并准备好DbUnit将在内部使用JUnit来完成某些事情,我需要在TestNG中使用DbUnit,因为DbUnit扩展了JUnit,所以我不知道该怎么做。目前我正在使用IDatabaseTester实例,而不是扩展类DbTestCase,这是在TestNG中使用DbUnit的正确方法吗?我对此没有太多评论,因为我自己不使用TestNG(并且通过Unitils管理大多数DbUnit配置),但是环顾四周后,我意识到已经解决了这个问题:您只需要找出要扩展的TestNg测试类是什么,以及TestNg的前后方法,以及IDatabaseTester所需的接线中的插槽(所示示例使用JdbcDatabaseTester)