신입 취준생인데..
깃헙 프로젝트들 보다보면 거의 대부분 각 계층을 mockito 사용해서 단위테스트를 하던데 어떤 이유로 선택하는거야?
특히 f-lab에있는 프로젝트는 거의다 이방식을 선택하네?
내가 생각하기로 이방식 선택하는이유는
1. 코드에 대한 빠른 피드백 받아볼수있음
2. 계층별 코드 동작에대해 격리시킨채로 테스트할수있음
이거 2가지거든? 근데 나는 모킹이란건 외부API와 같은 내가컨트롤하기 까다로운부분들을 모킹해야 적절하게 사용하는거라고생각해.
그리고 위의 방식으로 테스트하는방식의 문제점이
첫번째로는 실제 데이터가 들어갔을때 제대로 동작한다는 보장이 없는것.. (given.. then 의 답정너 형식의 테스트..?)
두번쨰로는 목이라는것 자체가 리팩터링에 취약해서 조건 하나 바뀌면 다 수정해야하고.. 목을 걷어내는것도 비용이라고 알고있어
나도 이전에는 mock사용해서 테스트 작성하는방법을 했었는데.. 요즘엔 @SpringBootTest로 하는편이거든..
물론 각방법의 장단점은 있으니까 둘다 보이게 된다면 납득은할수있지만 거의 90%이상이 Mock으로 테스트하네..
그럼 내가 놓치는 무언가 더큰 장점이있다는건데 어떤걸까? 어느쪽이 더 좋다고 생각하는건아닌데 그냥 대부분 장악하고있어서 궁금해서 글남겨봄..
나도 요즘 mock배우고 있는데 springboottest는 넘 느려서 짜증나
근데 니말대로 답정너네 ㅋㅋ 실제 결과랑 다를수도 있을텐데
내 생각엔 사실 어떤방법이든 있어도 이상할건없는데 뭐라해야될까 mock 테스트가 장악하다보니까 내가 놓치고있는게 있나 싶네
모킹을 해야만 하는 구조니까 모킹을 하는거지 까리하게 도메인 로직 딱 분리해서 거기만 딱 테스트 하면 더 좋지
모킹 도배되면 그거 개같은거 맞음
모킹을 해야만하는구조라는게 외부연동 말고 어떤게 있을수있어? 도메인 로직 테스트는 나도 그럴수있다고 생각하는데
혹시 뭐 또 다른게 있어?
일단 그리고 f-lab에서 @SpringBootTest로 테스트하는 프로젝트가 생각보다 많이 안보여서 왜그런지 이유가 궁금하네.. 능력있는 멘토들이 봐주는 코드일텐데..저런 구조로 면접들고가서 만약 전체를 모킹해서 테스트하면 실제로 동작한다는건 어떻게 테스트하죠? 라고 질문받으면 할말이없지않아?
모든 로직이 트랜잭션 스크립트 스타일로 작성돼있으면 죄다 모킹 해야지 별 수 있냐?
너는 포인트를 좀 잘못 잡았는데, 유닛테스트가 뭔지 이해하지 못한 것 같음 한번 검색해봐라
하나의 기능 또는 메서드단위가 정상작동하는지 빠르고 격리된방식으로 확인하는게 유닛테스트이고,
통합테스트는 모듈간 연동테스트하면서 유닛테스트가 다루지못하는 예외상황을 체크할수있는 테스트라고 알고있어
https://kukim.tistory.com/107
위글
정리 잘되어있어서 보면서 확인해보고있는데..
https://github.com/ku-kim/Cook-Java/tree/main/src/test/java/kim/ku/test/chicagoVSlondon
코드로보면
여기 코드에서 london에있는 test방식은 많이봤는데 왜 chicago에있는 테스트방식은 보기가 힘든지 궁금해..
1. 단위테스트를 모킹해서 코드레벨에서 문제가 없는지 체크하기위한목적으로 mock을 하는거라면 실제 동작확인을 위한 통합테스트라도 작성해야하는것아닌지? 그런데 해당 테스트를 작성한 코드를 본적이없음.. 2. 단위테스트를 왜꼭 런던파 방식으로 모킹해서만 해야하는지?(글의 마지막 결론부분에서도 언급됨..)
단위테스트가 뭔지 전혀 이해하지 못했네 ㅋㅋㅋㅋ
힌트좀 줄수있음? 나도 너무 알고싶어서.. 모킹 단위테스트만 존재하는게 아니라 결국 통합테스트도 있어야하는거아니야? 실 데이터가 들어갔을땐 어떻게보장함..?
내가 딱 모든계층 Mock주입해서 테스트코드 짜고 실제로 피드백 받았던소린데 이것저것 찾아봐도 이 궁금증이 풀리질않음..
너무 학파, 이론에 매몰되지 마셈. 이 비즈니스 로직은 굉장히 중요하니까 mocking 쳐서 기능별로 테스트 치고, 통합테스트 필요하겠다 싶으면 통합테스트도 짜고 하셈.
클래식 vs 런던, oop vs fp 이걸 왜 구분지음 걍 필요하면 가져다 쓰는거지
단위 테스트, 통합 테스트 둘 다 존재해야한다는 법은 세상에 없어 둘 다 하면 좋은거고, 그게 힘들면 값싸게 처리 가능한 단위 테스트만 할수도 있는거야 보통은 가격대비 효용이 단위 테스트가 월등하게 높음 굳이 외부 시스템과 연결해봐야 테스트가 가능하다는건 설계를 잘못했거나 특수한 기능일 가능성이 높아
답글 달아줘서 ㄳ 달아준거 바탕으로 조금더 생각해볼게 무슨말인지 이해했음