@Test 後のトランザクションのロールバック 質問する

@Test 後のトランザクションのロールバック 質問する

まず、これについては StackOverflow で多くのスレッドを見つけましたが、どれも本当に役に立たなかったので、重複した質問をして申し訳ありません。

spring-testを使用してJUnitテストを実行しています。コードは次のようになります。

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = {})
public class StudentSystemTest {

    @Autowired
    private StudentSystem studentSystem;

    @Before
    public void initTest() {
    // set up the database, create basic structure for testing
    }

    @Test
    public void test1() {
    }    
    ...  
}

私の問題は、テストが他のテストに影響を与えないようにしたいということです。そのため、各テストのロールバックのようなものを作成したいと思います。これについてはたくさん検索しましたが、今のところ何も見つかりません。これにはHibernateとMySqlを使用しています。

ベストアンサー1

@Transactionalテストの上に注釈を追加するだけです:

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations = {"testContext.xml"})
@Transactional
public class StudentSystemTest {

@Beforeデフォルトでは、Spring はテスト メソッドとコールバックを囲む新しいトランザクションを開始し@After、最後にロールバックします。これはデフォルトで機能し、コンテキスト内にトランザクション マネージャーがあれば十分です。

から:10.3.5.4 トランザクション管理(太字は筆者による):

TransactionalTestExecutionListenerTestContextフレームワークでは、トランザクションはTransactionalTestExecutionListenerによって管理されます。デフォルトで設定明示的にテストクラスに宣言していなくても@TestExecutionListeners、トランザクションのサポートを有効にするには、セマンティクスPlatformTransactionManagerによってロードされたアプリケーションコンテキストにBeanを提供する必要があります@ContextConfiguration。さらに、@Transactionalテストではクラスレベルまたはメソッドレベルで宣言する必要があります

おすすめ記事