메인 코드의 동작이 잘 작동하는지 테스트 할 수 있는 코드로 추가적인 코드를 작성해야 한다는 수고가 있지만, 전체적인 비용을 봤을땐, 굉장히 효율적인 작업이다.
테스트 코드 없이, 메인 코드를 통해 정상적인 작동을 확인하려면
코딩 -> 서버 동작 -> 데이터 입력 -> 테스트 대상의 메소드 동작을 위한 요청 -> 결과 확인
의 과정이 소요된다. 과정이 많아 시간이 오래걸리고, 실제로 어느 부분에서 오류가 발생하는지 명확하게 알기 어려울 것이다. 복잡하게 엮여있는 메인 코드의 규모가 커지면 커질수록 더 힘든 작업과 비용이 요구된다.
하지만, 테스트 코드를 통해 정상적인 작동을 확인한다면,
코딩 -> 테스트 코드 실행 -> 결과 확인
의 과정이 소요된다. 과정도 확 줄지만, 결과확인에 용이 하다. 특히 각각의 역할을 가진 메서드들을 작은 단위로 쪼개 테스트를 작성한다면, 어느 부분에서 오류가 발생하는지 명확하게 알기 쉬워진다.
그렇다면 어떻게 결과를 확인하는 방법이 좋을까?
단순히 System.out.println()
을 통한 결과 확인은 정말 간단한 경우에나 가능하다
작성한 모든 테스트 케이스의 결과를 일일히 확인하며 매번 대조해보는것은 불가능한 일이기 때문이다.
또, 원하는 결과가 나오지 않더라도 실행되며, 정확한 결과를 확인하는데에 더 많은 코드가 필요하게 된다.
이러한 이유로 각각의 언어는 XUnit이라는 프레임워크를 제공하여 테스트의 결과를 보다 쉽게 확인할 수 있다.
JUnit은 자바에서 독립된 단위 테스트 작성을 지원해주는 프레임워크다
단위 테스트란
소스 코드의 특정 모듈이 의도된 대로 정확히 동작하는지 검증하는 절차이다.
모든 메소드에 대한 테스트 케이스를 작성하는 절차를 뜻함.
JUnit Platform + JUnit Jupiter + JUnit Vintage 을 모두 지원하는 JUnit5 버전을 사용한다.
JUnit Platform
: TestEngine 인터페이스를 가지고 있다. 이 TestEngine을 통해서 테스트를 발견하고 실행하는 역할을 한다.JUnit Jupiter
: TestEngine 인터페이스를 구현하는 모듈 중 하나. jupiter-api를 사용하여 JUnit5 버전에서 작성된 테스트를 실행 할 때 사용되는 모듈JUnit Vintage
: 기존 JUnit4 버전에서 작성된 테스트를 실행할 때 사용되는 모듈구조를 간단히 말하자면,
큰 Jar덩어리였던 junit4가 junit5가 되면서 구버전 모듈(Vintage) + 신버전 모듈(Jupiter) + IDEs/Build Tools/Extenston(Platform)으로 나뉘었다
Jar : JAR는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다.
일종의 자바 프로젝트 압축 파일이다.
Java 8 이상부터 사용 가능하며, 이전 버전의 JDK로 컴파일된 코드도 테스트할 수 있다.