1. 개요
JUnit은 반복 가능한 테스트를 작성하기 위한 간단한 프레임워크입니다.
JUnit은 Java에서 사용됩니다.
단위 테스트를 위한 xUnit 아키텍처의 인스턴스입니다.
JUnit 4 주석을 알면 테스트 코드를 더 쉽게 작성할 수 있습니다.
자주 사용된 @Test, @Ignore, @Before, @BeforeClass, @After 및 @AfterClass 주석을 살펴보겠습니다.
.
2. 테스트 케이스에서 사용
@시험
가장 기본적인 메모입니다.
junit의 테스트 클래스 생성 시 메소드 앞에 “extends TestCase”와 “test”를 추가하는 불편함을 없앴습니다.
TestCase가 확장되지 않았기 때문에 assert* 메소드를 사용하려면 import static org.junit.Assert.*;가 필요합니다.
import org.junit.Test;
import static org.junit.Assert.*;
public class ClassNameTest{
@Test
public void methodName(){
…
assertEquals(4, methodName(1, 3));
}
}
@Test(예상 = Exception.class)
@Test의 예상 범위에 있는 클래스 메서드 내에서 try 및 catch 중에 발생하는 예외를 정의합니다.
정의된 예외는 메서드 내에서 시도하고 포착할 필요가 없습니다.
@Test(expected = ArithmeticException.class)
public void divisionZero(){
new Calculator().divide(4, 0);
}
@테스트(시간 초과 = 5000)
@Test 시간 제한은 메서드에 시간 제한을 부여할 수 있습니다.
성능 테스트 시 일정 시간 경과 후 종료될 수 있습니다.
테스트가 종료되기 전에 시간 초과되면 다음 오류 메시지가 표시됩니다.
@Test(timeout = 5000)
public void lengthyOperation(){
…
}
java.lang.Exception: 5000밀리초 후 테스트 시간 초과
@Ignore(“테스트 실행 제외 사유”)
해당 메소드는 @Ignore를 통해 테스트 메소드 실행에서 제외할 수 있다.
나중에 직관적으로 검토할 수 있도록 제외 이유를 기록해 둡니다.
import org.junit.Ignore;
@Ignore("메소드가 아직 준비되지 않았습니다.
")
@Test
public void yetMakeMethod(){
…
}
@전에
테스트 메서드가 실행되기 전에 실행되는 메서드
import org.junit.Before;
@Before
public void setUp(){ … }
@후에
테스트 메서드 실행 후 실행되는 메서드
import org.junit.After;
@After
public void tearDown(){ … }
@비포클래스, @애프터클래스
수업이 처음 시작하고 끝날 때 호출됩니다.
@BeforeClass
public static void setupClass(){
System.out.println("setupClass");
}
@AfterClass
public static void finishClass(){
System.out.println("finishClass");
}
3. 테스트 스위트에서 사용
@RunWith(값=Suite.class) & @SuiteClasses
테스트 스위트에 추가할 테스트 클래스는 다음과 같이 간단히 적용할 수 있습니다.
여러 JUnit을 실행할 수 있습니다.
@RunWith에 정의된 Suite Runner를 실행합니다.
@SuiteClasses는 Suite Runner에 해당하는 클래스를 포함합니다.
.
주석을 적용하기 전에
public class AllTests extends TestCase{
public static Test suite(){
TestSuite suite = new TestSuite();
suite.addTestSuite(CalculatorTest.class);
suite.addTestSuite(AnotherTest.class);
return suite;
}
}
주석을 적용한 후
@RunWith(value=Suite.class)
@SuiteClasses(value={CalculatorTest.class, AnotherTest.class})
public class AllTests{
…
}
@RunWith(값=파라미터화된.클래스)
테스트 메소드의 파라미터 값을 @Parameters에 정의된 값으로 변경하기만 하면 실행됩니다.
@RunWith(value=Parameterized.class)
public class FactorialTest{
private long expected;
private int value;
@Parameters
public static Collection data(){
return Arrays.asList(new Object()(){
{1, 0}, // expected, value
{1, 1},
{2, 2},
{24, 4},
{5040, 7}
});
}
public FactorialTest(long expected, int value){
this.expected = expected;
this.value = value;
}
@Test
public void factorial(){
Calculator calculator = new Calculator();
assertEquals(expected, calculator.factorial(value));
}
}
실행 결과
factorial#0: assertEquals( 1, calculator.factorial( 0 ) );
factorial#1: assertEquals( 1, calculator.factorial( 1 ) );
factorial#2: assertEquals( 2, calculator.factorial( 2 ) );
factorial#3: assertEquals( 24, calculator.factorial( 4 ) );
factorial#4: assertEquals( 5040, calculator.factorial( 7 ) );