我正在進行單元測試,它通過DAO向Oracle數據庫提交信息,然後檢索它並檢查一切是否未更改。@NotTransactional alternatives
有在測試類中其他的單元測試,並在類的頂部,我有:
@TransactionConfiguration (defaultRollback = true)
我想知道我怎麼能刪除@NotTransactional。我沒有在類中指定Transactional,所以默認情況下沒有測試應該是這樣的。由於這是自己的測試,我不知道@BeforeTransaction(或After)註釋是否正確。
最大的問題是沒有@NotTransactional,它看起來好像unsubscribe()函數沒有運行。 (垃圾標誌未更改)
再次運行測試,使用@ rollback = false和@NonTransactional,我在數據庫中看到垃圾標誌正確設置爲true,測試完成後數據庫中。
@RunWith (SpringJUnit4ClassRunner.class)
@TransactionConfiguration (defaultRollback = true)
public class DatabaseTest {
@Autowired (required = true)
private FooDao<Foo> fooDao;
@Autowired (required = true)
private FooService fooService;
// other tests here that are marked @Transactional.
@Test
@NotTransactional
public void testDelete() {
Foo foo = new foo();
foo.setTrashFlag(false);
foo.setId(123);
fooDao.create(foo);
Foo fooFromDb = fooService.getFromDbById(123);
assertNotNull(fooFromDb);
fooService.unsubscribe(123); // among other things,
// **sets trash flag to true.**
// sqlSession.flushStatements(); // doesn't seem to commit the unsubscribe action
// getFromDbById() returns ONLY Foos with trash set to false, so we expect
// nothing returned here as we've just set trash to true, using unsubscribe().
Foo trashedFoo = fooService.getFromDbById(123);
assertNull(trashedFoo);
謝謝!
您應該可以閱讀您在同一交易中寫下的任何記錄。 – Marvo 2013-03-18 23:18:08
我同意。我仍然無法確定爲什麼它不會在測試方法上沒有執行@NotTransactional。 – iank 2013-03-19 15:55:16
我承認我從來沒有聽說過NotTransactional,直到你的問題。你能否展示你的一個測試並解釋你期望發生的事情?如果我需要訪問Hibernate對象上的子記錄,我只需將@Transactional放在我的測試中,這對我很有用。 – Marvo 2013-03-19 18:46:40