현상
@BeforeAll
public void cleanUp()
{
postsRepository.deleteAll();
}
@Test
public void test()
{
generateDummy();
List<Posts> list = postsRepository.findByOrderByIdDesc();
log.info(list.toString());
Assertions.assertEquals(4, list.size());
Assertions.assertTrue(list.get(0).getId() > list.get(1).getId());
}
테스트 메소드 실행 전에 DB에 값들을 전부 지우고 진행하고 싶어서 @BeforeAll 어노테이션의 cleanUp 메소드를 만들어서 실행했으나 JUnitException 에러가 발생하였다.
org.junit.platform.commons.JUnitException: @BeforeAll method 'public void com.example.mybootapp.domain.PostsRepositoryTests.cleanup()' must be static unless the test class is annotated with @TestInstance(Lifecycle.PER_CLASS)
cleanUp 메소드를 실행하려면 static 이거나 테스트 라이프 사이클을 클래스로 수정하라는 메시지였다.
해결
@Slf4j
@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class PostsRepositoryTests
위와 같이 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 어노테이션을 추가해 생명주기를 클래스 단위로 바꾸었다.
그 결과 정상적으로 작동하는 것을 확인했다.
JUnit은 기본적으로 @TestInstance(TestInstance.Lifecycle.PER_METHOD) 라서 메소드가 끝나면 생명이 끝나다보니 @BeforeAll에는 static 메소드만 와야하는거 같다.
'프로그래밍 > 오류보고' 카테고리의 다른 글
[JUnit] DataJpaTest 중 dataSource 관련 에러 (0) | 2022.09.28 |
---|---|
[Querydsl] Unable to load class 'com.mysema.codegen.model.Type' 에러 (0) | 2022.09.27 |
[Spring]Intellij에서 스프링 devtools이 작동하지 않는다면 (0) | 2022.06.14 |