【发布时间】:2014-06-26 16:02:38
【问题描述】:
我正在尝试为我们应用的一种数据库访问方法编写单元测试。我们有一个专用的测试数据库(实时数据库的定期转储/副本)。通常每个测试用例都在单个事务中运行,然后回滚。我们通过在测试用例之前使用Connection.setAutoCommit(false) 和之后使用Connection.rollback() 来实现这一点。
但这一次,我正在尝试为一个方法编写一个测试,该方法本身将所有事情都作为一个事务处理,并在最后使用Connection.commit()。
有没有一种方法可以防止commit 实际提交到数据库,而不会在正在测试的方法中引发错误?也就是说,我怎样才能不让这个测试用例真正改变测试数据库的内容?
注意事项:使用 Java、JDBC 和 Junit。 java.sql.Connection 用于数据库连接,java.sql.PreparedStatement 用于运行查询。
@Before 和@After 代码:
/**
* Obtain a new connection and set autoCommit to false.
* This lets us run a test case then revert all of the changes
* so the test cases don't interfere with each other.
*/
@Before
public void initConnection() {
conn = Database.getConnection();
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
fail("Unable to set connection AutoCommit=false");
}
}
/**
* Rollback the changes made by the test case
* and close the connection.
*/
@After
public void rollbackConnection() {
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
fail("Unable to rollback");
}
Database.closeConnection(conn);
}
【问题讨论】:
标签: java postgresql jdbc junit automated-tests