用TestCase的子类做数据库设置

你可以覆盖标准的JUnit的setUp()方法,然后执行你所需要的数据库操作,并且在类似teardown()的方法中做清理工作 比如:

public class TestCaseSubClass extends TestCase {
    public TestCaseSubClass(String name) {
        super(name);
    }

    protected void setUp() throws Exception {
        super.setUp();
        super.setUp();

        // initialize your database connection here
        IDatabaseConnection connection = null;
        // ...

        // initialize your dataset here
        IDataSet dataSet = null;
        // ...

        try {
            DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
        } finally {
            connection.close();
        }
    }
}

从2.2版本开始使用新的IDatabaseTester来提供相似功能.如前文所提DbTesteCase使用IDatabaseTester做内部实现,也可以在你的测试类中使用它来处理DataSets.现在有如下四中实现:

  • JdbcDatabaseTester: 使用DriverManager创建连接
  • PropertiesBasedJdbcDatabaseTester: 也是使用DriverManager,但是配置是从系统属性中读取,这也是DbTestCase的默认实现
  • DataSourceDatabaseTester: 使用 javax.sql.DataSource创建连接
  • JndiDatabaseTester: 使用javax.sql.DataSource定位JDNI

你也可以自己提供IDatabaseTester实现,它建议使用AbstractDatabaseTester做为起始点 例如:

public class TestIDatabaseTester extends TestCase {
    private IDatabaseTester databaseTester;

    public TestIDatabaseTester(String name) {
        super(name);
    }

    protected void setUp() throws Exception {
        databaseTester = new JdbcDatabaseTester("org.h2.Driver",
                "jdbc:h2:mem:user-db;MODE=PostgreSQL;INIT=RUNSCRIPT FROM './src/test/resources/sql/create_table.sql'",
                "sa", "sa");

        IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream("./src/test/resources/dataset.xml"));

        databaseTester.setDataSet(dataSet);
        // will call default setUpOperation
        databaseTester.onSetup();
    }

    protected void tearDown() throws Exception {
        // will call default tearDownOperation
        databaseTester.onTearDown();
    }

}

results matching ""

    No results matching ""