작성
·
240
0
답변 2
0
안녕하세요, 김정기 님! :)
말씀주신 고민이 JPA와 mybatis의 차이에서 발생하는 고민이라기 보다는, 검증하는 방법에 대해 한번 고민해보시면 좋을 것 같은데요. ㅎㅎ
강의에서 말씀 드린 것처럼 테스트는 세 가지 단계를 거치게 됩니다.
given
해당 테스트 케이스(이하 TC)에 사용할 데이터(fixture)를 생성하는 단계입니다.
when
TC에 해당하는 행위를 수행합니다.
then
행위를 수행한 후, 의도한대로 동작했는지 검증합니다.
김정기 님이 댓글에 말씀주신 예시를 가지고 구성해본다면, 다음과 같을 것입니다.
given
아메리카노, 카페라떼, 스무디 데이터 생성 및 저장
이 때, 스무디를 가장 비싼 가격으로 설정
when
가장 비싼 메뉴를 가져오는 쿼리 or 메서드 수행
then
1. 가져온 결과가 가장 비싼 메뉴인지 검증
2. 가져온 결과가 스무디인지 검증
차이점은 then절에서 생길텐데요.
말씀주신 방법은 1번으로, 다시 DB에서 가장 비싼 메뉴를 검증하기 위해 쿼리를 날려서 해당 메뉴를 가져와 비교하는 방법입니다.
이미 고민하고 계신 것처럼, 검증을 위한 테스트 쿼리가 잘못되면 테스트 자체가 무의미한 테스트가 될 수 있습니다.
사실 잘 생각해보면, 우리는 given절에서 테스트 케이스를 구상하며 데이터를 만들면서, (즉, TC를 위한 상황을 임의로 구성하면서) 스무디가 가장 비싼 메뉴라는 것을 알고 있습니다.
그렇다는 것은, when절에서 프로덕션 쿼리를 수행해 나온 결과가 가장 비싼 메뉴인지를 다시 조회하여 검증하는 것이 아니라, 이미 우리가 스무디가 가장 비싼 메뉴라는 것을 가정하고 TC 상황을 구성했기 때문에 2번 방법처럼 결과가 스무디인지를 검증하면 되는 것이죠. (메뉴의 이름, 가격 등으로)
새로운 테스트용 쿼리를 짜서 검증하게 되면 (when절에서 수행하는) 프로덕션 쿼리와 거의 같은 쿼리를 짜게 될텐데, 검증이라는 단계가 큰 의미가 없어질 것 같아요.
도움이 되셨기를 바랍니다.
감사합니다. :)
0
카페라고 예시를 들겠습니다
아메리카노 카페라떼 스무디가 있다면
스무디가 가장비싼 음료라고 가정을 하겠습니다
현재 제가짠 쿼리는 스무디를 정상적으로 잘 가져오고 있습니나
그런데 짠 쿼리를 검증하려면 스무디가 가장 비싼 가격이라는 것을 검증을 해야하는데 이 가격을 검증을하려면 데이터베이스를 한번더 조회하는 쿼리를 짜서 확인을 해야하는데 이 테스트 쿼리가 잘못됐다면
테스트가 잘못된 테스트가 되어버리는건디
이러한 상황에서 다들 어떻게 하셨는지 궁금합니다
jpa가 아닌 경우여서 발생하는 상황인데 충분히 생길 수 있는 상황이라 궁금합니다