Java에서 사용하는 자동화된 단위 테스트 프레임워크입니다. JUnit은 단위 테스트를 작성, 실행, 디버그 등을 보고하는데 사용됩니다. JUnit을 사용하여 코드가 예상대로 작동하는지 검증할 수 있으며 코드 변경사항이 문제를 발생시키지 않도록 확인할 수 있습니다.
Java 언어의 대부분의 IDE와 빌드 도구와 함께 사용할 수 있습니다.
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
인텔리제이로 프로젝트를 만들면 다음과 같이 초기에 설정되어있는 것을 확인할 수 있습니다.
src/test/java 에서 클래스를 만들어서 테스트를 진행하면 됩니다. 클래스 안에 메서드가 테스트 코드임을 알리기 위해 @Test어노테이션을 사용합니다.
@Test
public void testHello() {
System.out.println("hello");
}
위의 결과로 테스트 코드 작성을 하였습니다. 하지만 테스트 하는 이유는 내가 생각한 값과 코드에서 출력되는 값이 일치해야하는 것을 확인하는 목적이 있기 때문에 결과 확인이 중요합니다 결과 값을 확인할 때 주로 Assertion클래스를 활용합니다.
Assertion 클래스는 테스트가 예상대로 작동하는지 확인하기 위해 사용되며, 테스트 케이스 성공, 실패 여부를 결정합니다. assertTrue,assertFalse,assertEquals등과 같이 테스트 케이스에서 예상 결과를 검증할 수 있습니다.
@Test
public void test() {
int a = 1;
int b = 2;
Assertions.assertEquals(3, a + b);
}
다음과 같이 성공/실패 여부를 확인할 수 있습니다.
1. Parameterized Tests
같은 테스트를 여러 번 실행하고 다양한 입력 값을 사용하여 실행 결과를 확인하는 기능입니다.
2. Test Suites
여러 개의 테스트 케이스를 하나로 묶어 실행하는 기능입니다. 해당 기능을 사용하면 여러 테스트 케이스를 한꺼번에 실행하여 전체 시스템의 안정성을 확인할 수 있습니다.
3. Timout
각 테스트 케이스가 실행되는 시간을 제한하는 기능입니다. 이를 활용하면 테스트 중 무한 루프나 데드락 같은 문제가 발생하여 테스트가 종료되지 않는 것을 방지할 수 있습니다.
4. Exception Testing
특정 예외가 발생하는 것을 확인하는 기능입니다. 예외 처리가 제대로 이루어지는지 확인하기 위해 사용됩니다.
5. Test Fixutres
테스트를 실행하기 전에 설정이나 초기화 작업을 수행하거나, 테스트가 종료된 후에 정리 작업을 수행하는 기능입니다. 이를 활용하면 각 테스트 케이스를 독립적으로 실행할 수 있으며, 테스트 환경을 더욱 깨끗하게 유지할 수 있습니다.
이외에도 다양한 기능을 제공하며 효과적으로 테스트할 수 있습니다.
Mock이란? 가짜 객체입니다. 해당 객체를 사용하는 이유는 다음과 같습니다.
1. 격리된 테스트 환경
Mock객체를 사용하면 각각의 테스트 케이스가 격리된 환경에서 실행될 수 있습니다. 이를 통해 다른 테스트 케이스에 영향을 받지 않는 독립적인 테스트 환경을 구성할 수 있습니다.
2. 테스트 용이성
실제 객체를 테스트하는데에 있어 제대로 구현하기 어려운 경우에 해당됩니다. 복잡한 객체 구조의 단일 객체를 테스트하는 경우, 의존 객체까지 만들어 테스트해야하는 경우에 작업이 복잡해질 수 있습니다. Mock 객체를 사용하여 의존 객체의 동작을 대신하게 하여 복잡도를 제어할 수 있습니다.
3. 미완성 코드 테스트
완성되지 않은 코드를 테스트할 때 Mock객체를 사용하여 의존 객체들을 대신하면서 코드 테스트를 할 수 있습니다. 또한 완성 이전의 코드 테스트가 진행되기 때문에 보다 빠른 피드백을 받을 수 있습니다.
코드 커버리지는 테스트 코드가 얼마나 많은 소스 코드를 커버하는지를 나타내는 지표입니다. 즉, 테스트 코드를 실행하여 소스 코드의 얼마나 많은 부분이 실행되었는지를 나타냅니다.
코드 커버리지가 100%에 가까울 수록 테스트가 충분하게 진행된 것으로 간주됩니다. 코드 커버리지는 테스트 코드의 효과성을 평가하고 테스트 코드의 누락된 부분을 찾아내어 소스 코드의 안정성을 높이는데 도움이 됩니다.
코드 커버리지 측정 도구는 다음과 같은 것이 있습니다.
1. JaCoCo
Java 코드 커버리지 도구로서, 다양한 커버리지 지표를 제공하며 Ant,Maven,Gradle과 같은 빌드 도구와 통합하여 사용할 수 있습니다.
2. Cobertura
Java 코드 커버리지 도구로 코드 커버리지 지표뿐만 아니라 라인별 커버리지, 클래스별 커버리지등 다양한 정보를 제공합니다.