-
11강. 회원 레포지토리 테스트 케이스 작성스프링 프레임워크-입문 2021. 5. 4. 01:18
개발한 기능이 잘 돌아가는지 테스트를 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 컨트롤러를 통해서 해당 기능을 실행할 수 있습니다. 하지만 이런 방법은 실행하는데 오래 걸리고, 반복하기 어렵고, 한번에 여러 테스트를 실행하기 어렵다는 단점이 있어 JUnit이라는 프래임워크를 실행해서 이를 대신하도록 하겠습니다.
test 패키지 밑에 repository 패키지를 만들고 MemoryMemberRepositoryTest를 생성합니다. 같은 root에 두는 것도 명칭에 Test를 붙이는 것도 관례적인 것입니다.
간단한 코드를 만든 후 실행을 해보도록 하겠습니다.
로직과 코드가 아무것도 없어 무리없이 정상 수행이 됩니다. save()안에 로직을 채워넣어 다시 테스트를 해보도록 하겠습니다.
Optional로 선언되어 있기 때문에 get()을 통해서 꺼내겠습니다. 믈런 Optional을 get()으로 직접 꺼내는 것은 좋지는 않지만 테스트 코드에서는 괜찮습니다. result에 입력된 것이 제가 만든 member와 같은지 체크하겠습니다.
result의 값이 제가 setName()을 통해 값을 저장한 member와 동일한 것을 확인할 수 있습니다.
하지만 매번 글자로 확인할 수 없기에 코드의 변화를 주도록 하겠습니다.
아무런 결과가 출력되지 않지만 정상 수행 됨을 알 수 있습니다.
Assertions.asserEquals(expect, actual)
-> expect의 값이 actual과 같은가.
만약 비교하는 값이 변화를 주게 되면
기대하는 값은 Expected에 명시된 것인데 실제로 비교한 값은 null이기에 같은 값이 아니기에 에러를 발생시켰습니다.
static-import를 하여
아래로 바꾸겠습니다. member의 값이 result와 비교하는 구문입니다.
그리고 Repository에서 만들었던 findByName()을 test 해보도록 하겠습니다.
두 개의 객체를 생성하고 각각을 repository에 save()를 사용하여 저장했습니다. 그 후 result 함수에 Optional을 벗겨서 이름이 "spring1"인 것을 찾고 그것이 제가 설정한 member1과 맞는지 체크하겠습니다. 만약 여기서 다른 값이라면 에러가 발생하게 될 것입니다.
정상 수행이 됨을 알 수 있습니다.
민약 다른 값이 입력이 된다면 제가 예상한대로 에러가 발생하게 됩니다.
그리고 findAll()을 테스트 해보겠습니다.
리스트로 받은 후 리스트의 개수가 제가 입력한대로 2개인지 테스트 해보겠습니다.
정상 실행이 된 것을 확인할 수 있습니다.
test 순서는 보장이 안됩니다. 모든 테스트는 메서드가 독립적으로 실행이 되도록 설계를 해야합니다. 즉 순서에 의존적으로 하면 안됩니다. 값이 저장되어 에러를 발생시킬 수도 있기 때문에 테스트가 끝나면 데이터를 Clear 해주어야 합니다. 그러기 위해 우리는 아래의 코드를 추가합니다.
테스트가 끝날 때마다 작동하게 하는 @AfterEach 어노테이션을 명시하고
MemoryMemberRepository만 구현할 것이기에 바꿔줍니다.
그 후 MemoryMemberRepository에 이동해서
store의 값을 clear 해줄 수 있는 메서드를 새로 생성합니다.
Test가 끝날 때마다 store가 clear 되게 됩니다. test 코드를 수행해서 남은 값으로 에러가 발생하는 경우를 미연에 방지할 수 있게 됩니다.
테스트 코드가 없이 개발하는 것은 여러 명이 개발할 때는 불가능 합니다. 몇 만라인, 몇 십만 라인이 구동되는데 test가 없이 한다는 것은 너무 어렵기에 테스트 코드를 많이 사용하도록 합시다.
'스프링 프레임워크-입문' 카테고리의 다른 글
13강. 회원 서비스 테스트 (0) 2021.05.04 12강. 회원 서비스 개발 (0) 2021.05.04 10강. 회원 도메인과 레포지토리 만들기 (0) 2021.05.02 9강. 비즈니스 요구사항 정리 (0) 2021.05.02 8강. API (0) 2021.05.02