我沒有問題測試我的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