我没有问题测试我的DAO和服务,但是当我测试INSERT
s或UPDATE
s我想回滚事务并且不影响我的数据库。如何在JUnit中使用Spring测试服务时回滚数据库事务?
我在我的服务中使用@Transactional
来管理事务。我想知道,是否有可能知道事务是否可以正常工作,但回滚它以防止更改数据库?
这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring.cfg.xml")
@TransactionConfiguration(defaultRollback=true)
public class MyServiceTest extends AbstractJUnit38SpringContextTests {
@Autowired
private MyService myService;
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Test
public void testInsert(){
long id = myService.addPerson("JUNIT");
assertNotNull(id);
if(id < 1){
fail();
}
}
}
的问题是,这个测试将失败,因为事务已rollbacked,但插入是OK! 如果我删除@TransactionConfiguration(defaultRollback=true)
,则测试通过但新记录将插入到数据库中。
@Test
@Transactional
@Rollback(true)
public void testInsert(){
long id = myService.addPerson("JUNIT");
assertNotNull(id);
if(id < 1){
fail();
}
}
现在可以正确测试通过,但回滚被忽略并且记录被插入到数据库中。 很明显,我在myService中用@Transactional
注解了方法addPerson()
。 为什么回滚被忽略?
很好的问题+1 :-) – 2013-12-13 10:52:48