본문 바로가기
반응형

테스트코드9

검증부 (assert / expect)는 하드코딩한다 최근 코드리뷰를 하다가 자주 지적하던 내용이 있어, 정리하게 되었다. 요즘 팀 분들이 가장 많이 하는 실수가 바로 검증부에 도메인 로직이 추가되는 것이다. 이를테면 다음과 같은 구현 클래스가 있다고 해보자. export class FilePath { private readonly _path1: string; private readonly _path2: string; private readonly _path3: string; private readonly _path4: string; constructor(path1: string, path2: string, path3: string, path4: string) { this._path1 = path1; this._path2 = path2; this._path.. 2021. 11. 15.
테스트 코드에서 내부 구현 검증 피하기 테스트 코드를 작성하고 운영하다보면 기존 코드가 조금만 변경되어도 테스트를 다 고쳐야하는 경우가 종종 있다. (모든 경우가 그렇진 않겠지만) 기능의 최종 결과를 검증하는게 아니라 내부 구현을 검증하는 경우에 자주 이런일이 있었다. 내부 구현을 검증하는 테스트들은 구현을 조금만 변경해도 테스트가 깨질 가능성이 커진다. 내부 구현은 언제든지 바뀔 수 있기 때문에 테스트 코드는 내부 구현 보다 최종 결과를 검증해야한다. 그럼, 내부 구현을 검증하는 경우란 어떤 것인지 알아보자. 1. 상세 구현부를 다 검증하는 경우 이를 테면 다음과 같이 합계 금액을 구하는 클래스가 있다고 하자. export class OrderAmountSum { minusSum: number = 0; plusSum: number = 0; .. 2021. 11. 11.
테스트 픽스처 올바르게 사용하기 xUnit에서는 테스트 대상 시스템 (System Under Test, 이하 SUT) 를 실행하기 위해 해줘야 하는 모든 것을 테스트 픽스처라고 부른다. 처음 테스트 코드를 배우게 되면 이 테스트 픽스처 부분에 대해서 완전히 오해하는 경우를 자주 본다. 최근에 팀에 단위 테스트를 전파하고 코드리뷰를 진행하는 과정에서 다들 비슷한 오해를 하고 있는걸 발견하고 작성하게 되었다. 모든 코드는 TypeScript와 Jest로 작성되었다 1. beforeEach (setup) 등 사용할 경우 아래 코드를 보면 공통된 테스트 픽스쳐를 beforeEach 로 처리하였다 describe('Order1', () => { let sut: Order; beforeEach(() => { sut = Order.create(10.. 2021. 10. 30.
Jest CLI 대신에 WebStorm Run (Debug)로 수행하자 NodeJS 통합 테스트를 CLI (jest)로 수행 하는 모습을 자주 보는데요. 개인적으로는 단순 CLI로 수행하기 보다는 디버깅을 비롯해서 IDE가 지원하는 강력한 테스팅 환경을 사용하기 위해서 IDE로 수행하는 것을 추천합니다. 이번시간에는 CLI 보다 IDE로 통합 테스트를 수행하는 방법의 장점을 알아보겠습니다. 1. 장점 먼저 깔끔하게 정리된 테스트 레포트를 볼 수 있는데요. 아래와 같이 지정해놓은 테스트 로그를 숨기고 결과만을 정리 해서 보여줍니다. 기존 CLI에서는 테스트를 수행하는 동안 발생한 콘솔 로그 때문에 (특히 debug 용도로 찍어놓은 ㅠ) 정작 중요하게 봐야할 부분을 놓치기도 하는데요. 해당 테스트에서만 발생한 로그를 골라서 볼 수 있습니다. 추가적으로, 디버거를 사용할 수 있어.. 2021. 10. 19.
Jest를 IntelliJ (or Webstorm) Debug 모드로 실행하기 VS Code에 비해 Javascript 개발 환경에서 IntelliJ (+ WebStorm)이 갖는 가장 큰 장점은 디버깅 기능입니다. 코드의 호출 스택을 쫓아간다거나, 곳곳의 코드에서 브레이크를 걸고 Expression으로 임시코드를 실행해보는 등 다양한 디버깅 기능을 IntelliJ에서는 사용해볼 수 있는데요. Javascript의 테스트 프레임워크인 Jest를 사용할때도 IntelliJ의 디버깅 기능을 활용할 수 있습니다. 이번 시간에는 IntelliJ에서 Jest를 디버깅 모드로 사용하는 방법을 알아보겠습니다. 실습을 위해서는 본인의 프로젝트에 Jest 패키지와 테스트 코드가 필수입니다. 현재 포스트에 사용된 코드는 Github에서 확인할 수 있습니다. 1. Debug 실행 환경 구성 Intel.. 2021. 1. 1.
테스트 코드에선 LocalDate.now()를 쓰지말자. 여러 사람의 코드를 볼때 가끔 테스트 코드에서 LocalDate.now() 를 사용하는걸 종종 보게 됩니다. 아무래도 편하게 작성할 수 있다보니 사용된것 같지만, 이는 좋은 패턴이 아닙니다. 그래서 예제로 테스트 코드에서 LocalDate.now()를 쓰면 안되는 이유를 소개하겠습니다. 예제 예를 들어 다음과 같은 코드가 있다고 가정합니다. 배송 예정일을 구합니다. 배송 예정일은 주문일 +3 영업일입니다. 즉, 월요일에 주문했다면 +3일인 목요일을, 목요일에 주문 했다면 금/월/화로 되어 화요일이 배송 예정일이 됩니다. 주말외에 공휴일 판단을 위해 공휴일 여부 판단 엔티티가 존재합니다. 위 조건을 만족하는 2개의 엔티티 클래스들입니다. 첫번째는 공휴일 여부를 가지는 엔티티입니다. @Getter @NoAr.. 2019. 5. 3.

728x90