-
JUNIT test 오류 : org.opentest4j.AssertionFailedError:PROGRAMMING/오류 모음집 2023. 1. 1. 02:54
하루입니다.
(김영한님의 인프런 강의 스프링 입문 스프링부트 강좌에서 배운 내용입니다!)
테스트코드 작성 중 발생한 에러. 아래는 전체 코드이다.

아래는 오류 발생 내역이다.

분명 각자 실행했을 때는 에러가 없었는데 왜 같이 실행하니까 에러가 발생할까?
- 이유는 test code의 실행순서에 있었다.
- test code는 순서대로 실행되지 않는다. 당장 위를 보더라도 맨 마지막인 findAll()이 가장 먼저 실행되었다.
- 이미 findAll()에서 mem1 객체가 생겼다. findByName은 이미 생성된 mem1의 주소를 비교하기에 기대한 값이 나오지 않는 것이다.
- 그러면 어떻게 해야 할까?
해결책
1. MemberRepository가 확장한 MemberRepository에 .clear()를 사용한 메소드를 구현한다. 목적이 객체를 비우는 것이고, 내 경우에는 Map<>을 사용했기에 내부를 비워주는 clear() 메소드를 사용했다.
2. 테스트 코드 클래스에 와서 @AfterEach를 사용하여 해당 메소드를 사용한다. 말 그대로 test가 끝날 때마다 실행되는 코드이다.
3. 성공!



테스트 코드는 이번에 처음 작성해봤다. 처음엔 번거로운 과정이라고 생각했는데, 사용해보니 코드의 유효성을 적은 시간과 노력으로 검증할 수 있는 좋은 방식이라는 생각이 들었다. Test를 미리 하고 실행하는 것을 TDD 방식이라고 한다. Test code에 대한 지식이 많아진다면 TDD 방식으로 작은 프로젝트를 진행해 보고 싶기도 하고. 아무튼 김영한님이 테스트코드 필수라고 하셨으니까 앞으로도 이거 써야겠다 땅땅.
'PROGRAMMING > 오류 모음집' 카테고리의 다른 글