私は、DAOを介してOracleデータベースに情報をコミットし、それを取得してすべてが変更されていないことを確認する単体テストに取り組んでいます。
テストクラスには他の単体テストがあり、クラスの上部には次のものがあります。
@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);
ありがとう!