SpringアプリケーションのJUnitテストで、セットアップメソッドに大量のデータを挿入し、それを使用してテストしたいと思います。ただし、@Before
メソッドに注釈を付けたとしても、メソッドで行われたことはすべて、各テストの後にロールバックされているように見えます。@Rollback(false)
これが私がやろうとしていることの単純化されたバージョンです:
public class TestClass
{
@Autowired
MyService service;
@Before
public void setup()
{
if(service.getById(1) == null)
{
Thing thing = new Thing();
thing.setId(1);
service.create(new Thing(1))
}
}
}
も使用してみまし@BeforeClass
たが、メソッドが静的である必要があり、setterメソッドが呼び出される前に実行される@Autowired
ため、実行時に呼び出す必要のあるサービスにアクセスできません@BeforeClass
。
を使用してみ@PostConstruct
ましたが、トランザクションを使用できるようにすることに問題があります(そして、トランザクションの開始時にのみHibernateセッションを使用できるように設定されています)。奇妙なことに、セッションが利用可能であるように見えましたが、同じセッション内から取得した2つのオブジェクトが等しくなかったため、Hibernateの第1レベルのキャッシュが失敗したか、各操作が別々のセッションで発生していました。@BeforeTransaction
同じ振る舞いを示しているようでした。