class AcceptanceTestExecutionListener : AbstractTestExecutionListener() {
override fun beforeTestMethod(testContext: TestContext) {
val environment = testContext.applicationContext.environment
val serverPort = environment.getProperty("local.server.port", Int::class.java)
RestAssured.port = serverPort ?: 0
val jdbcTemplate = getJdbcTemplate(testContext);
val truncateQueries = getTruncateQueries(jdbcTemplate);
truncateTables(jdbcTemplate, truncateQueries);
}
...
}
망규님의 템플릿과의 차이점은, 망규님의 경우 afterTestMethod로 쿼리를 날렸지만, 내 생각에는 어차피 처음에는 테이블이 비워져 있고, 마지막 인수테스트 이후에는 쿼리를 날릴 필요가 없어서 beforeTestMethod로 변경했다.
또한, RestAssured.port에 포트 번호를 넣는 동작을 추가적으로 수행하고 있다. (망규님 코드에서는 port를 지정해주지 않아도 되던데 그 이유는 정확히 모르겠다)
처음에는 @LocalServerPort로 포트 번호를 주입하려 여러 시도를 해보았으나, 끝내 주입되지 않았다. 궁금해서 TestExecutionListener를 타고 들어가 봤더니 빈으로 등록하지 않고 있었다. POJO의 필드에서 스프링 빈을 주입받길 원하고 있었으니 당연히 주입되지 않았던 것이다.
대신 메서드 주입으로 testContext를 받고 있었기 때문에, testContext에서 포트를 직접 꺼내어서 RestAssured.port에 지정해서 해결했다.
구글링 하다보니 비슷한 문제를 겪고 계신 분이 있으셔서 내가 해결한 해결책을 제안해 드리기도 했다.