1

运行我的测试时,它挂在对方法()的调用。难道我做错了什么?帮助!

@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 数据库和两个数据源,则测试通过...

4

2 回答 2

0

您正在尝试打开与数据库的第二个连接。第一个是因为@Transactionalfor class被打开TestREQUIRES_NEWonmethod()强制另一个连接。

可能您的连接池只允许一个并发连接。检查其大小和数据库配置。

还要遍历您的问题并将所选答案标记为已接受(答案主体旁边的复选标记形状)。

于 2012-01-30T11:54:18.310 回答
0

正如 mrembisz 所说,您正在尝试同时/线程获得 2 个连接。

  1. 对于测试本身,它将在测试期间存在
  2. 对于在调用期间存在的方法调用。

我在稍微不同的情况下遇到了同样的事情。

解决此问题的 2 种方法:

  1. 将传播更改为REQUIRED,这样您就可以重用最初获得的测试连接。
  2. 增加池大小,但请记住,您需要大致考虑同时更新的最大数量maxThreadPoolSize >= (maxSimultaniousUpdates + 1) + (min size for other activities)(如果您在列表 1 处有挂起的连接,最终所有挂起的操作都会完成)。否则,这将重新出现在生产中。

第一个解决方案在我看来更好,当然如果它不损害你的逻辑:)

于 2012-12-09T17:34:57.583 回答