강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 리포지토리 테스트 케이스 작성

전체 테스트 진행할때 findByName 오류 질문있습니다.

작성

·

262

0

Map이나 HashMap은 key 값만 중복안되면 value 값은

상관 없는걸로 알고 있습니다. 그럼 해당 에러는 

Member result = repository.findByName("spring1").

get() 이부분에서 오류가 난건가요..? 어느부분에서 오류가

나는건지 궁금합니다. 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 유진이님

Member result = repository.findByName("spring2")

spring2 그러니까 member2를 조회했는데, 다음과 같이 member1로 비교해서 오류가 발생했습니다.

assertThat(result).isEqualsTo(member1);

감사합니다.

답변 감사드립니다. 

class MemberMemberRepositoryTest {

MemoryMemberRepository repository = new MemoryMemberRepository();

/* @AfterEach
public void afterEach() {
repository.clearStore();
}*/

@Test
public void save() {
Member member = new Member();
member.setName("spring");

repository.save(member);

Member result = repository.findById(member.getId()).get();

/*System.out.println("result = " + (result == member));*/
/*Assertions.assertEquals(member, result);*/
assertThat(member).isEqualTo(result);
}

@Test
public void findByName() {
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);

Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);

Member result = repository.findByName("spring1").get();

assertThat(result).isEqualTo(member1);
}

@Test
public void findAll() {
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);

Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);

List<Member> result = repository.findAll();

assertThat(result.size()).isEqualTo(2);

}
}

해당 코드에서 말씀하신 부분이 없습니다.. 테스트 돌렸을 시 findByName에서 

오류가 뜨게되는데 save() 메소드에 member에 "spring"을 넣고 해당 코드를 테스트 한 후에

findByName의 코드를 테스트해도 겹칠 부분이 없어보이는데 왜 오류가 뜬 것인지 이해가 

가지 않습니다.

다시 말해, 위의 코드를 개별로 돌렸을때는 괜찮은데 같이 테스트 돌렸을 시 findByName에서

오류가 뜨는 이유를 잘 이해하지 못해서 질문 남겼습니다. 제가 설명을 잘못해서 전달이

잘 안됐던것 같습니다 ㅠ 개발자님께서 강의중에는 어떤부분이 겹쳐서 오류가 나기 때문에

AfterEach를 사용해서 각각의 테스트를 돌리기전에 초기화 해줘야 한다고 말씀하셨던

부분입니다..! 

김영한님의 프로필 이미지
김영한
지식공유자

AfterEach가 주석처리 되어 있네요. 하나의 테스트가 끝나면 과거 데이터가 데이터베이스에 데이터가 누적될 수 있어서 다음 테스트에 영향을 줍니다. 따라서 AfterEach가 작동하도록 해주세요.

감사합니다.

제가 처음 질문을 잘 못알아듣게 해서 자꾸 빙빙 돌게 만드네요 ㅠ AfterEach가 주석처리되서 오류가 나는 것은 아는데 저기서 save 메소드와 findByName의 어느부분이 겹쳐서 오류를 만드는 것인지 궁금해서 질문을 남기게 되었습니다.

김영한님의 프로필 이미지
김영한
지식공유자

네 저 부분이 주석처리 되어 있으면 이전 테스트의 데이터가 남아있게 됩니다. 여기서는 findAll()에서 저장한 spring1이 남아있고 그 데이터가 조회되어 버릴 수 있습니다.

그래서 테스트가 끝나면 항상 AfterEach를 사용해서 데이터를 초기화해주어야 합니다. 

감사합니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기