[Java/JUnit4]#2 이클립스에서 JUnit 4 활용하기
안녕하세요 미나라이입니다.
이번 포스팅에서는 JUnit4의 다양한 기능에 대해 활용해 보려고 합니다.
프로젝트 환경
OS : Windows 10
IDE : Eclipse 2021-12 (4.22.0)
JDK : 16.0.2
JRE : JavaSE-14
JUnit : 4.13.2
@Test
테스트 대상 메소드를 지정합니다.
해당 어노테이션이 붙어있는 메소드는 JUnit테스트 대상이 됩니다.
import static org.junit.Assert.assertEquals;
import org.junit.Test;
@Test
public void sumTest() {
System.out.println("> Sum Test");
assertEquals(9, obj1.sum(4,5));
}
@Before , @After
테스트 시작 전에 한번씩 실행되는 어노테이션으로
클래스 내부에 @Test어노테이션이 존재하면 그 개수만큼 반복합니다.
public static Calculator obj1 = new Calculator();
@Before
public void setup() {
System.out.println("Instance Setup");
obj1 = new Calculator();
}
@Test
public void sumTest() {
System.out.println("> Sum Test");
assertEquals(9, obj1.sum(4,5));
}
@Test
public void subTest() {
System.out.println("> Sub Test");
assertEquals(1, obj1.sub(5,4));
}
@After
public void dispose() {
obj1 = null;
System.out.println("Instance Dispose");
}
콘솔 출력 결과
Instance Setup > Sum Test Instance Dispose Instance Setup > Sub Test Instance Dispose |
@BeforeClass, @AfterClass
테스트 클래스 내부에서 딱 한 번씩만 도는 어노테이션입니다.
public static Calculator obj1 = new Calculator();
@BeforeClass
public static void start() {
System.out.println("=== Calc Test Start ===");
}
@Before
public void setup() {
System.out.println("Instance Setup");
obj1 = new Calculator();
}
@Test
public void sumTest() {
System.out.println("> Sum Test");
assertEquals(9, obj1.sum(4,5));
}
@Test
public void subTest() {
System.out.println("> Sub Test");
assertEquals(1, obj1.sub(5,4));
}
@After
public void dispose() {
obj1 = null;
System.out.println("Instance Dispose");
}
@AfterClass
public static void end() {
System.out.println("=== Calc Test End ===");
}
콘솔 출력 결과
=== Calc Test Start === Instance Setup > Sum Test Instance Dispose Instance Setup > Sub Test Instance Dispose === Calc Test End === |
Exception결과 예상 테스트(expected)
테스트를 하다보면 에러 결과를 예상해야 하는 경우가 있습니다.
이럴 때 예상되는 에러를 리턴 해 주는 로직을 짤 수 있습니다.
샘플 소스는 나눗셈 로직에서 인자를 0으로 주었을 때 에러가 나는 것을 예상 한 테스트입니다.
@Test(expected = ArithmeticException.class)
public void divExceptionTest() throws ArithmeticException {
System.out.println("> Div Exception Test");
assertEquals(5.0, obj1.div(5,0), 0);
// 에러가 나면 테스트 결과가 정상
}
처리 시간 테스트(timeout)
최적화 작업을 하면서 처리 시간이나 이런 부분에 대한 테스틀 진행하는 경우가 있습니다.
이럴 때는 타임아웃 기능을 추가해서 해당 타임(밀리초)이 지나면 테스트 실패를 반환시킬 수 있는 기능이 있습니다.
@Test(timeout = 100)
public void subTest() {
System.out.println("> Sub Test");
assertEquals(1, obj1.sub(5,4));
// 100밀리초가 지나도록 처리가 안 끝나면 테스트 실패
}
여러 클래스를 한꺼번에 테스트 하기(@SuiteClasses)
단위 테스트를 클래스 단위로 할 때 한꺼번에 진행하는 방법입니다.
일괄 테스트를 위해 AllTests.java를 새로 작성합니다.
※ 이클립스에서 새로 만들기 JUnit Test Suite로 작성해도 됩니다.
ClacTest , TextTest , ArrayTest 테스트를 한 번에 진행하기 위해서 SuiteClasses로 묶었습니다.
package com.test;
import org.junit.experimental.categories.Categories;
import org.junit.runner.RunWith;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({ CalcTest.class,
TextTest.class,
ArrayTest.class })
public class AllTests {
}
콘솔 출력 결과
=== Calc Test Start === Instance Setup > Sub Test Instance Dispose Instance Setup > Sum Test Instance Dispose Instance Setup > Mul Test Instance Dispose Instance Setup > Div Exception Test Instance Dispose Instance Setup > Div Test Instance Dispose === Calc Test End === === Text Test Start === Instance Setup > String StartsWith Instance Dispose Instance Setup > String EndsWith Instance Dispose Instance Setup > Object Compare Instance Dispose Instance Setup > String EndsWith Throws Instance Dispose Instance Setup > String Compare Instance Dispose === Text Test End === === Array Test Start === Instance Setup > IntArr Compare Instance Dispose Instance Setup > StrArr Compare Instance Dispose === Array Test End === |
테스트 결과
원하는 부분만 테스트 하기(@IncludeCategory, @Category)
테스트를 하다 보면 필요한 부분만 빼서 하고 싶을 때가 있습니다.
이럴 때는 @Category 기능을 이용해서 테스트를 진행할 수 있습니다.
먼저 개별 처리용 인터페이스 파일을 하나 작성합니다.
IncludeTests.java
package com.test;
public interface IncludeTests {}
CalcTest.java
이제 테스트하고 싶은 항목만 카테고리로 선택을 합니다.
// 개별처리용 인터페이스를 구현 처리
@Category(IncludeTests.class)
@Test
public void sumTest() {
System.out.println("> Sum Test");
assertEquals(9, obj1.sum(4,5));
}
AllTests.java
IncludeTests항목 카테고리로 지정 한 부분만 테스트를 진행하도록 어노테이션을 설정합니다.
package com.test;
import org.junit.experimental.categories.Categories;
import org.junit.experimental.categories.Categories.*;
import org.junit.runner.RunWith;
import org.junit.runners.Suite.SuiteClasses;
// 카테고리로 선택 한 부분만 출력 한다고 정의
@RunWith(Categories.class)
@SuiteClasses({ CalcTest.class,
TextTest.class,
ArrayTest.class })
// 아래 인터페이스에 구현 한 테스트 항목만 실행
@IncludeCategory(IncludeTests.class)
public class AllTests {
}
콘솔 출력 결과
=== Calc Test Start === Instance Setup > Sum Test Instance Dispose === Calc Test End === |
테스트 결과
Category에서 지정한 항목만 출력되는 것을 확인할 수 있습니다.
원하는 부분만 테스트 안 하기(@ExcludeCategory, @Category)
IncludeCategory와는 반대로 해당 카테고리로 지정한 항목만 테스트를 스킵하는 기능입니다.
사용법은 IncludeCategory랑 동일하니 스킵하도록 하겠습니다.
그 외 기본적인 assertEquals의 사용법이 있는데 이 부분은 샘플 소스에 올려놓도록 하겠습니다.
샘플 소스 첨부합니다.
자세한 내용은 API페이지를 참고 해 주세요
참고 링크
이상으로 간단한 JUnit 4 활용법에 대해서 포스팅해 보았습니다.
다음엔 JUnit 5에 대해서 간단하게 살펴보도록 하겠습니다.
'Java&JSP&Spring > Java' 카테고리의 다른 글
[Java/JUnit5]#2 이클립스에서 JUnit 5 활용하기 (0) | 2021.12.20 |
---|---|
[Java/JUnit5]#1 이클립스에서 JUnit 5 시작하기 (1) | 2021.12.20 |
[Java/JUnit4]#1 이클립스에서 JUnit 4 시작하기 (0) | 2021.12.17 |
[JAVA]자바 삼항연산자를 이용한 학점 환산 프로그램 만들기 (0) | 2018.12.23 |
[JAVA]자바 if ~else if문을 이용한 간단한 학점 환산 프로그램 (0) | 2018.12.23 |