Lio*_*orH 0 junit spring unit-testing transactions
我正在使用Spring junit runner及其事务功能来在每次测试之前和之后启动和回滚事务.
但是我有一个测试类有一些繁重的数据库初始化,我希望每个测试(方法)在事务范围内运行,即在测试开始时启动一个事务,并在完成类中的所有测试后回滚它.
您是否意识到在一个事务中拥有所有测试方法会导致很多麻烦?基本上,您不能再依赖于拥有干净的数据库,因为其他测试方法将在此过程中对其进行修改.并且由于未指定测试方法的顺序,因此您也不能依赖它(因此您永远不会知道数据库的确切含义).基本上您放弃了所有测试事务支持,唯一的保证是在运行整个测试用例之后,数据库将保持干净(因此其他测试用例不会受到影响).
抱怨你的结束.我不认为Spring支持这种开箱即用的行为(部分原因是由于上面强调的原因).但是,如果仔细查看TransactionalTestExecutionListener,它将负责Spring驱动的测试中的事务支持.
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
//...
startNewTransaction(testContext, txContext);
}
Run Code Online (Sandbox Code Playgroud)
和:
@Override
public void afterTestMethod(TestContext testContext) throws Exception {
//...
endTransaction(testContext, txContext);
//...
}
Run Code Online (Sandbox Code Playgroud)
现在看起来更近了,没有实现beforeTestClass和afterTestClass...你会在Spring参考文档的第9.3.5章中找到详细说明如何连接这一切.提示:编写自己的监听器并使用它代替TransactionalTestExecutionListener.
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |