🎄 최근에 대부분의 서비스 회사가 테스트 코드에 관해 요구하고 있습니다. 프로젝트를 하면서 테스트의 필요성을 알게됐고, 더 자세하게 알기위해 정리를 시작했습니다.
TDD는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나로 애자일 방법론중 하나이다. 테스트가 주도하는 개발을 말한다. 즉 테스트 코드를 먼저 작성하는 것부터 시작합니다.
객체지향적인 코드 개발
테스트 코드를 먼저 작성한다면, 좀 더 명확한 기능과 구조를 설계할 수 있다. 각 기능들에 대해서 철저히 구조화 시켜 코드를 작성할 수 있다. 자연스럽게 코드의 재사용성을 보장한다.
설계 수정 시간의 단축
미리 테스트 시나리오를 작성해봄으로써 코드 개발 전 기능을 구현하기 위한 예외 상황들을 미리 확인하고, 조사하게 되는 효과로 설계의 구조적 문제를 바로 찾아낼 수 있다.
디버깅 시간의 단축
기본저으로 단위 테스트 기반의 테스트 코드를 작성하기 때문에 추후 문제가 발생하였을 때 각각의 모듈 별로 테스틀 진행해보면 문제의 지점을 쉽게 찾아낼 수 있다.
유지 보수의 용이성
입력과 출력의 흐름이 명확해지고 추후 구조의 변경 및 소스 수정 시 구조를 쉽게 파악하고 빠른 수정이 가능해진다.
테스트 문서의 대체 가능
TDD를 구현하게 될 경우에 테스팅을 자동화 시킴과 동시에 보다 정확한 테스트 근거를 산출 할 수 있다.
TDD의 사용이유 참고
단위 테스트는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 이야기합니다. 순수하게 테스트 코드만 작성하는 것을 이야기한다.
JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. JUnit은 테스트 주도 개발 면에서 중요하다. 테스팅 결과를 단순히 문서로 남기는 것이 아니라 Test class를 그대로 남김으로써 추후 개발자에게 테스트 방법 및 클래스의 History를 넘겨줄 수 있다.
1.Maven을 통해 쉽게 추가
2.poem.xml 에 dependency를 추가한다.
assertArrayEquals(a, b)
: 배열 a와 b가 일치함을 확인
assertEquals(a, b)
: 객체 a와 b의 값이 같은지 확인
assertSame(a, b)
: 객체 a와 b가 같은 객체임을 확인
assertTrue(a)
: a가 참인지 확인
assertFalse(a)
: a가 거짓인지 확인
assertNotNull(a)
: a객체가 Null이 아님을 확인
setUp()
: 테스트 대상 클래스의 실행전에 가장 먼저 setUp()을 실행
tearDown()
: 가장 마지막에 수행되며 setUp()의 반대 개념으로 생각한다.
위에 함수는 Test Case를 진행할 때 마다 반복적으로 실행한다.
@Test
: 해당 메서드는 Test대상 메서드임을 확인한다.
@BeforeClass
: 해당 테스트가 시작 전에 딱 한번씩만 수행되도록 지정한다.
@AfterClass
: 해당 테스트가 끝나고 딱 한 번씩만 수행되도록 지정한다.
@Before
: 해당 테스트가 진행이 시작되기 전에 작업할 내용을 호출한다.
@After
: 해당 테스트가 진행이 끝난 후에 작업할 내용을 호출한다.