TDD(5)
-
[TDD/Jest] Enzyme와 같이 사용하기
Enzyme Jest는 테스트를 위한 프레임워크 개념이었다면, Enzyme는 테스트를 위한 라이브러리다. 주로 Jest + Enzyme로 테스트 코드를 많이 작성한다. React에서도 테스트 코드를 구성할 때 위 조합을 많이 사용하게 된다. enzyme에는 adapter를 적용하는 configure를 제외하면 크게 세 가지 메소드가 있다. shallow: 간단한 컴포넌트를 메모리 상에 렌더링한다. 단일 컴포넌트를 테스트할 때 유용하다. mount: HOC나 자식 컴포넌트까지 전부 렌더링한다. 다른 컴포넌트와의 관계를 테스트할 때 유용하다. render: 컴포넌트를 정적인 html로 렌더링한다. 컴포넌트가 브라우저에 붙었을 때 html로 어떻게 되는지 판단할 때 사용한다. 설치 # NPM npm i -D ..
2021.12.30 -
[TDD/Jest] 모킹하기 Mocking
Mocking 코드가 의존하는 부분을 가짜(mock)로 대체하는 기법이다. 테스트하려는 코드가 의존하는 부분을 직접 생성하기가 부담스러운 경우 mocking이 많이 사용된다. 예를 들어, 데이터베이스에서 데이터를 삭제하는 코드에 대한 단위 테스트를 작성할 때, 실제 데이터베이스를 사용한다면 여러가지 문제점이 발생할 수 있기 때문에 모킹을 사용한다. 모킹을 하는데에는 여러 방법이 있다. (모듈 단위를 모킹하거나, 함수만 모킹하거나.. 등) jest.fn(); 일반적으로 함수를 모킹할 때 사용된다. // 정의 const mockFunction = jest.fn(); // 사용 mockFunction("y0ngha"); 이 mockFunction을 실제 함수를 호출하듯 사용할 수 있고, 리턴 값에 대해서도 정..
2021.12.29 -
[TDD/Jest] Jest로 Test 코드 작성하기
Jest 테스트 코드를 작성하고, 테스트를 실행할 수 있는 라이브러리다. Jest 외에도 Mocha, Chai 라이브러리도 있는데, Jest를 쓰는 이유는 테스트를 하기 가장 적합한 라이브러리라고 판단했고, 무엇보다 국내 자료가 Jest가 많기 때문이다. 결국 라이브러리는 본인이 편한 것을 쓰면 되기 마련이다. (테스트를 하고자 하는 목적은 똑같으니.) 그렇다면 Jest를 사용하기 위한 방법과 문법을 간단하게 알아보자. 사용 전 설치 Jest를 사용하기 전 의존성을 설치해줘야 하는 것이 있다. 당연히 Jest 를 설치해야하고, 본인이 Typescript를 이용해 작성할 것이라면 Jest가 Typescript를 이해할 수 있도록 도와주는 Babel 또한 설치 해줘야 한다. Jest는 Javascript를 ..
2021.12.29 -
[TDD] TDD가 실패하는 이유
TDD를 많이 적용하려고 한다. 하지만, 실제로 업무에 적용을 하기까지는 많은 시간이 필요하며, 그 많은 시간을 들여서도 적용을 했을 때 실패하는 케이스가 대부분이다. 그렇다면 TDD를 왜 실패할까? TDD를 설계방법론으로 이해하고, 설계를 진행하는데 사용하고 있다. TDD가 설계방법론이라면, 우리는 TDD를 통해 좋은 설계를 얻을 수 있어야한다. 하지만 TDD는 아래의 특징을 갖고 있다. TDD는 높은 응집을 유도하지 않는다. TDD는 단일 책임 원칙(SRP)과 인터페이스 분리 원칙(ISP) 위배에 어떤 신호도 주지 않는다. TDD는 인터페이스 일관성을 도출하지 않는다. TDD의 리팩토링 단계는 좋은 구조를 갖게 하도록 안내하지 않으며 또한 강제하지 않고 있다. 위 4가지의 내용으로 보았을 때 TDD는..
2021.12.29 -
[TDD] What is TDD and BDD?
(본 글은 최수형님의 TDD 강의(https://www.youtube.com/watch?v=L1dtkLeIz-M)를 보고 따로 정리한 내용이다.) 1. TDD(Test Driven Development)의 궁극적 목표 Clean code That works! 작동을 하는 깨끗한 코드를 만들기 위해 TDD를 사용한다. 2. TDD 작성시 주의사항 1. Testable Code를 작성하자. 이 말은 즉 관심사의 분리(SoC)가 필요하다는 것이다. [ 관심사의 분리 ? ] 프로그램을 하나의 단일 Block으로 작성하지 말고 작은 조각으로 나누어 간단한 개별 작업을 완료할 수 있도록 하는 원칙이다 (즉 긴 복잡한 함수로 작성하지 말고 분리할 것.) 이 원칙을 지키게 될 경우의 기대값으로는 코드가 간결해지고, 작..
2021.12.09