본문 바로가기
Projects/2021-CVI (백중원)

210727(화) - 테스트

by jum0 2021. 7. 27.

1. 테스트


1. 테스트

페어와 테스트에 대해서 이야기를 하면서 통합 테스트와 E2E 테스트 간의 큰 차이를 느끼지 못한다는 것에 서로 동의했다. 그래서 Jest + React Testing Library나 Cypress 중 어떤 하나를 선택함으로써 오는 차이가 크지 않다고 생각했다. 예를 들어, Jest + RTL는 e2e 테스트가 불가하다고 알고 있는데 결국 특정 버튼을 눌러 그 결과를 테스트하는 게 E2E와 크게 다르지 않을까 생각했기 때문이다. 

결과적으로 Cypress를 선택했다. 사실 처음부터 Cypress를 선택한 것은 아니었고, Jest + RTL 환경 설정을 하는데, 필요한 라이브러리와 환경 설정을 세팅했는데도 계속 하나씩 부족하다는 에러를 마주쳤다ㅠ 저녁 전까지 계속 시도했지만 테스트를 작성하기도 전에 환경 설정이 되지 않아서 아무것도 할 수가 없었다. 처음에는 막히더라도 하나씩 에러를 찾으면 결국에는 할 수 있겠지라고 생각했지만, 시간이 지나면서 점점 희망의 끈을 놓기 시작했던 것 같다. 결국 반 강제적으로 Cypress를 선택했다. 사실 다른 선택지로의 선택을 하게 된 기술이지만, 페어는 UI로 보여주는 테스팅 도구라 Jest + RTL 보다 더 좋다고 했다. 나는 개인적으로 어떤 테스팅 도구를 사용하든지 없었다. 처음에는 어쩔 수 없이 선택하게 된 Cypress이지만, 지난 레벨 1에 비해 버전도 6.X에서 8.X가 될 정도로 많이 개선되었고, 무엇보다 공식 문서가 너무 친절해서 테스팅 도구를 바꾸자마자 천국을 맛볼 수 있었다.

---

통합 테스트와 E2E 테스트가 크게 다르지 않다고 생각하고 있었는데, 그것은 이전에 E2E 테스트를 가장한 통합 테스트를 진행하고 있었기 때문일 수도 있다는 리뷰어님의 피드백(네 번째 질문)을 봤다.

먼저 테스트에 대한 정의를 내리면, 유닛 테스트는 모든 함수나 메서드 등이 정확하게 동작하는지에 대해서 테스트하는 것이고, 통합 테스트는 다양한 모듈이 통합되는 과정에서 일어나는 일에 대한 검증이다. 마지막으로 E2E 테스트는 특정한 시나리오를 기준으로 사용자 관점에서 진행되는 테스트이다.

테스트에 대한 정의는 이렇게 하고 페어와 이야기하면서 통합 테스트와 E2E 테스트의 차이가 크지 않다고 생각했던 것은 테스트를 할 관점이 명확하지 않았었기 때문이라는 것을 알았다. 유닛 + 통합 테스트와 함께 진행되는 컴포넌트 테스트는 온전히 컴포넌트의 관점에서 해당 기능이 제대로 동작하는지에 초점이 맞춰져 있다. 그래서 Input에 어떤 값을 입력하고 어떤 버튼을 눌렀을 때 어떤 결과가 나와야 하고, API mock으로 테스트했을 때 결괏값이 실패일 경우 어떤 결과가 나온다 등으로 설명된다. 이에 반해 E2E 테스트는 시나리오를 기준으로 테스트가 진행된다. 사용자에게 Input에 어떤 값을 입력하고 어떤 버튼을 눌렀을 때 어떤 결과가 나오는 것은 중요하지 않다. 이런 것보다는 시나리오에 따라 1. 로그인을 진행한다. 2. 로그인을 진행하는 과정에서 회원 가입이 되어 있지 않다. 3. 회원 가입 버튼을 누른다. 4. 회원 가입 폼이 보인다 등과 같이 테스트의 초점이 사용자에게 집중되어야 한다.

이런 점에서 페어와 어떤 테스트에 초점을 맞출 것인지 논의해봐야겠다.

반응형

댓글