运行我的测试时,它在调用 method() 时挂起。难道我做错了什么?救命!
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"beans.xml"})
@Transactional(rollbackFor = Exception.class)
public class Test {
@Test
public void test() {
itemUnderTestDao.method();
// ...
}
}
public class ItemUnderTestDao {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void method() {
// ...
}
}
忘记上面的代码。我现在已经在http://www44.zippyshare.com/v/46865082/file.html上传了一个Eclipse项目(不包括像spring这样的依赖项) 。非常感谢所有有关如何通过测试的意见!如果我有两个 sqlite 数据库和两个数据源,则测试通过...
最佳答案
正如 mrembisz 所说,您正在尝试同时/线程获得 2 个连接。
- 对于测试本身,它将在测试期间存在
- 对于方法调用,该方法在调用期间一直存在。
我在稍微不同的情况下遇到了同样的事情。
解决此问题的两种方法:
- 将传播更改为
REQUIRED
,这样您就可以重用测试最初获取的连接。 - 增加池大小,但请记住,您需要考虑同时更新的最大数量,大致为
maxThreadPoolSize >= (maxSimultaniousUpdates + 1) +(其他 Activity 的最小大小)
(如果列表中有 1 个待处理连接,则最终所有待处理操作都会完成)。否则,这将在生产中重新出现。
在我看来,第一个解决方案似乎更好,当然,如果它不损害你的逻辑:)
关于java - 在 JUnit 中测试 REQUIRES_NEW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9063046/