[테스트 코드의 구성]
·
TDD
테스트 코드의 구성 요소 테스트 코드는 상황, 실행, 결과 확인의 세 가지 요소로 구성할 수 있다. 기능은 상황에 따라 결과가 달라지고 테스트 코드는 기능을 실행하고 그 결과를 확인하기 때문이다. 즉 어떤 상황이 주어지고 그 상황에서 기능을 실행하고, 실행한 결과를 확인하는 세 가지가 테스트 코드의 기본 골격을 이루게 된다. 외부 상황과 외부 결과 상황은 테스트 대상으로만 국한되는 것이 아니다. 상황에는 외부 요인이 있다. 예를 들어 DB에 접근이 필요한 테스트 코드가 있겠다. 테스트 결과를 외부에서 확인해야 할 때도 있다. 예를 들어 처리 결과를 지정한 경로의 파일에 저장하는 기능을 생각해보면, 이 기능의 실행 결과를 검증하려면 실제로 해당 파일에 접근하여 확인해야 할 것이다. 이런 외부 요인들은 개발..
[JUnit 5 기초]
·
TDD
JUnit을 활용하면 테스트 코드를 원활하게 작성할 수 있다. JUnit의 기초를 학습해보면서 테스트 코드를 작성할 수 있는 기반을 다지도록 하겠다. JUnit 5 모듈 구성 JUnit 5는 크게 세 가지 모듈로 구성되어 있다. JUnit 플랫폼: 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공한다. JUnit 주피터(Jupiter): JUnit 5를 위한 테스트 API와 실행 엔진을 제공한다. JUnit 빈티지(Vintage): JUnit 3과 4로 작성된 테스트를 JUnit 5 플랫폼에서 실행하기 위한 모듈을 제공한다. @Test 애노테이션과 테스트 메서드 JUnit 코드의 기본 구조는 간단하다. 테스트로 사용할 클래스를 만들고 @Test 애노테이션을 메서드에 붙이기만 하면..
[TDD 기능 명세 ∙ 설계]
·
TDD
기능 명세 개발자가 코드를 작성하는 이유는 사용자가 사용할 어떤 기능을 제공하기 위함이다. 기능에 대한 명세는 다양한 형태로 존재한다. 파워포인트를 이용한 스토리 보드 형태일 수도 있고 회의 자리에서 간단하게 구두로 전달받을 때도 있다. 어떤 형태가 되든 간에 사용자에게 제공할 기능을 구현하려면 기능을 크게 두 가지로 나누어 생각해야 한다. 바로 입력과 출력이다. 예를 들어 회원가입 기능에서 입력과 결과는 다음과 같이 정의할 수 있다. 입력: 회원가입 정보 출력: 중복되는 아이디가 없다면 성공, 중복되면 실패 설계는 기능 명세로부터 시작한다. 다양한 형태의 요구사항 문서를 이용해서 기능 명세를 구체화한다. 구체화 과정은 다음과 같다. 입력과 결과를 도출한다. 도출한 기능 명세를 코드에 반영한다. 이런 과..
[TDD 테스트 코드 작성 순서]
·
TDD
테스트 코드를 작성할 때 어려운 경우나 정상 상황인 경우를 먼저 시작하면 구현 과정이 원할하게 진행되지 않을 때가 많다. 왜 그런 것일까? 초반에 복잡한 테스트부터 시작하면 안 되는 이유 만약 초반부터 다양한 조합을 검사하는 복잡한 상황을 테스트를 추가하면 해당 테스트를 통과시키기 위해 한 번에 구현해야 할 코드가 많아진다. 검증해야 하는 작업이 많기 떄문이다. 한 번에 완벽한 코드를 만들면 좋겠지만, 모두가 실력 좋은 개발자인 것은 아니다. 보통의 개발자는 한 번에 많은 코드를 만들다 보면 버그를 만들게 되고 버그를 잡기 위해 엄청난 시간을 허비하게 된다. 당연히 테스트 통과 시간도 길어진다. 구현하기 쉬운 테스트부터 시작하기 가장 구현하기 쉬운 경우부터 시작하면 빠르게 테스트를 통과시킬 수 있다. 보..