SpringでDBのテストをするときにシーケンスがロールバックされない問題に対応する
SpringでDBのテストをするときに@Transactionalをつけるとテストメソッドの実行が終わるたびにロールバックしてくれるので便利なんですが、シーケンスがロールバックされないでテストがコケるという問題があります。
解決策は単純でsetupでシーケンスの初期化をすればいいだけ。
MySQLだとこんな感じです。
@SpringBootTest class EmployeeTableMapperTest extends Specification { @Autowired private EmployeeTableMapper sut @Autowired private JdbcTemplate jdbcTemplate @Transactional def "test"() { setup: jdbcTemplate.execute("ALTER TABLE employee_register_events AUTO_INCREMENT = 1") def genId = new GeneratedEmployeeId() when: sut.insert(new EmployeeRegisterEvent("shown", "white", 200000), genId) then: sut.select(genId.convert()) == [ "id" : 1, "first_name": "shown", "last_name" : "white", "salary" : 200000 ] } }