【发布时间】:2010-12-15 11:17:16
【问题描述】:
我应该如何测试一个同时使用的事务性服务方法(它通过减少一个值来更新数据库行)?
我已经使用 SpringJunit4ClassRunner 设置了一个 JUnit 测试类,并且组件是 @autowired。
仅仅产生调用该方法的线程似乎不起作用。我不确定这是否与 Spring 代理机制有关。
我想要实现的是创建一种情况,其中两个线程同时在测试方法“内部”,而另一个线程将失败并回滚。例如行值为 3,两个方法调用都尝试将值减 2;如果该方法不起作用,则该值为-1,这是非法的。但我希望这两个调用都失败并回滚,或者尝试更新它的一个失败,而不是另一个失败。
这可能吗?
【问题讨论】:
-
您应该准确解释在产生线程时什么不起作用。
-
我要么在可调用方法的一开始就遇到空指针异常(它只是一个私有方法调用),要么是休眠异常,说该表不存在,这很奇怪,因为同一个调用在没有线程正常工作的测试方法中。
标签: java multithreading spring junit transactional