[테스트] JUnit 4 –


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 ) );