私はJPAリポジトリのいくつかの機能をテストするテストクラスを持っています。私のJPAリポジトリはH2 dbに接続されています。私はテストエンタイトでdbを生成したいのですが、すべてのテストの前に、これは私のテストクラスです:junitのセットアップ方法を一度だけ実行する
public class EntityRepositoryTest {
@Autowired
EntityJPARepository EntityRepo;
Entity entity;
@Before
public void setup(){
entiti = //initializes entity with values
EntityRepo.save(entiti);
}
//some tests on repo
}
問題は@Before
annotiationは、すべてのテストメソッドの前にそれを呼び出すことである、と私はsave
は前にすべての呼び出されますので、私のエンティティオブジェクトは、H2デシベル(に複製したくありませんメソッド)、私も@BeforeClassの注釈で行うことができないので、私はメソッドを@autowiredリポジトリに呼び出す必要があります。リポジトリがautowiredになった後にすべてのテストを行う前に一度だけセットアップを呼び出すにはどうすればよいですか?
各テストのデータの整合性を保証するには、各テストの完了後にロールバックされるトランザクションで実行する必要があります。 @Beforeは同じトランザクションで実行されるため、次のテストが実行される前に、挿入されたすべての挿入がロールバックされます。参照:http://stackoverflow.com/questions/17308335/before-and-transactional。これに対処するためのコードを書く必要はありません。 –
@transactionalアノテーションを追加すると、私の問題も解決します。ありがとうございます! –