Mysql Spring Boot Unit Test @Transactional data is not rolled back

データベースエンジンが正しくありません。MYISAMを使用し、それをInnoDBに変更して解決してください。

mysqlワークベンチの使用など、データベースエンジンを表示するにはいくつかの方法があります。

Javaサンプルコード

@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
@Transactional
public class StudentTest {

    @Autowired
    private StudentDAO StudentDAO;

    @Test
    public void test() {
        Student s = new Student();
        s.setStudentId("0001");
        StudentDAO.save(s);
    }
}

公式説明

https://docs.spring.io/spring/docs/5.2.6.RELEASE/spring-framework-reference/testing.html#spring-testing-annotation-rollback

@Rollback トランザクションテストメソッドのトランザクションを、テストメソッドの完了後にロールバックするかどうかを示します。

の場合  true、トランザクションはロールバックされます。それ以外の場合、トランザクションはコミットされます(も参照  )。@Commit

Spring TestContext Frameworkの統合テストのロールバック は、明示的に宣言されていない 場合でも  デフォルト で行われます。true@Rollback

無効な試み

最初はエンジンの問題を特定できなかったため、次のような情報を確認しました。

https://stackoverflow.com/questions/12626502/rollback-transaction-after-test

“ AbstractTransactionalJUnit4SpringContextTestsを拡張する”

または「関数ごとに別々に注釈「@Transactional」を追加する」

その他の

オンにする

spring.jpa.show-sql = true

同時に、ログレベルが情報に設定されます

<Root level="info">
    <AppenderRef ref="RollingFile"/>
    <AppenderRef ref="Console"/>
</Root>

トランザクションとロールバックのログを見ることができます

05-22-2020 14:01:26.204 INFO [メイン] [] ostctTransactionContext:テストコンテキストのトランザクション(1)を開始しました [DefaultTestContext @ 1c7f52c8 testClass = StudentTest、testInstance = com.xx.Student.StudentTest@616a370b、testMethod = test @ StudentTest、testException = [null]、 


05-22-2020 14:01:26.355 INFO [メイン] [] ostctTransactionContext:テストのトランザクションロールバックしました:[DefaultTestContext @ 1c7f52c8 testClass = StudentTest、testInstance = com.xx.Student.StudentTest@616a370b、testMethod = test @ StudentTest、 testException = [null]、 

 

おすすめ

転載: blog.csdn.net/wuzhong8809/article/details/106281761