junitjunit 시작하기


비고

JUnit은 Java 프로그래밍 언어에 대한 반복 가능한 테스트를 작성하는 간단한 프레임 워크입니다. 단위 테스트 프레임 워크를위한 xUnit 아키텍처의 인스턴스입니다.

주요 기능 구성 :

  • 테스트에서 값을 테스트하는 방법을 사용자 정의 할 수있는 어설 션
  • 테스트 주자 - 클래스에서 테스트를 실행하는 방법을 지정할 수 있습니다.
  • 클래스의 테스트 동작을 유연하게 수정할 수있는 규칙
  • 스위트 는 다양한 클래스의 테스트 세트를 함께 구성 할 수있게 해줍니다.

JUnit을위한 유용한 확장 기능 :

  • AssertJ : 자바에 대한 유창한 주장
  • Mockito : Java 용 프레임 워크 조롱

버전

번역 출시일
JUnit 5 중요 시점 2 2016-07-23
JUnit 5 중요 시점 1 2016-07-07
JUnit 4.12 2016-04-18
JUnit 4.11 2012-11-14
JUnit 4.10 2011-09-28
JUnit 4.9 2011 년 8 월 22 일
JUnit 4.8 2009-12-01
JUnit 4.7 2009-07-28
JUnit 4.6 2009-04-14

설치 또는 설정

JUnit은 Java 라이브러리이므로 Java 프로젝트의 클래스 경로에 몇 개의 JAR 파일을 추가하면 바로 설치할 수 있습니다.

이 두 개의 JAR 파일을 수동으로 다운로드 할 수 있습니다 : junit.jar & hamcrest-core.jar .

Maven을 사용하고 있다면 pom.xml 의존성을 추가하기 만하면된다.

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>
 

또는 Gradle을 사용하는 경우 build.gradle 종속성을 추가하십시오.

apply plugin: 'java'

dependencies {
    testCompile 'junit:junit:4.12'
}
 

이 후 첫 번째 테스트 클래스를 만들 수 있습니다.

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class MyTest {
    @Test
    public void onePlusOneShouldBeTwo() {
        int sum = 1 + 1;
        assertEquals(2, sum);
    }
}
 

명령 줄에서 실행합니다.

  • Windows java -cp .;junit-X.YY.jar;hamcrest-core-XYjar org.junit.runner.JUnitCore MyTest
  • Linux 또는 OsX java -cp .:junit-X.YY.jar:hamcrest-core-XYjar org.junit.runner.JUnitCore MyTest

또는 Maven : mvn test

@전 후

@Before 가있는 주석 된 메소드는 @Test 메소드를 실행할 때마다 실행됩니다. @After 주석 메서드는 @Test 메서드마다 매번 실행됩니다. 이 기능을 사용하여 반복적으로 테스트 설정을 구성하고 모든 테스트가 끝난 후 정리할 수 있습니다. 따라서 테스트는 독립적이며 준비 코드는 @Test 메서드 내에서 복사되지 않습니다.

예:

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class DemoTest {

    private List<Integer> list;

    @Before
    public void setUp() {
        list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(4);
        list.add(1);
        list.add(5);
        list.add(9);
    }

    @After
    public void tearDown() {
        list.clear();
    }

    @Test
    public void shouldBeOkToAlterTestData() {
        list.remove(0); // Remove first element of list.
        assertEquals(5, list.size()); // Size is down to five
    }

    @Test
    public void shouldBeIndependentOfOtherTests() {
        assertEquals(6, list.size());
    }
}
 

주석 방법 @Before 또는 @After 있어야합니다 public void 제로 인수.

기본 단위 테스트 예제

이 예제는 junit을 사용하여 StringBuilder.toString ()을 unittesting하기위한 기본 설정입니다.

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class StringBuilderTest {

    @Test
    public void stringBuilderAppendShouldConcatinate()  {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("String");
        stringBuilder.append("Builder");
        stringBuilder.append("Test");

        assertEquals("StringBuilderTest", stringBuilder.toString());
    }

}
 

예상 예외 잡기

try catch 블록없이 예외를 쉽게 catch 할 수 있습니다.

public class ListTest {
  private final List<Object> list = new ArrayList<>();

  @Test(expected = IndexOutOfBoundsException.class)
  public void testIndexOutOfBoundsException() {
    list.get(0);
  }
}
 

위의 예제는 throw 된 예외로 전달 된 메시지를 확인하고 싶지 않거나 확인할 필요가없는 간단한 경우에 충분합니다.

예외에 대한 정보를 확인하려면 try / catch 블록을 사용할 수 있습니다.

@Test
public void testIndexOutOfBoundsException() {
    try {
        list.get(0);
        Assert.fail("Should throw IndexOutOfBoundException");
    } catch (IndexOutOfBoundsException ex) {
        Assert.assertEquals("Index: 0, Size: 0", ex.getMessage());
    }
}
 

이 예제에서는 Exception이 throw되지 않을 때 테스트가 실패하도록하기 위해 항상 Assert.fail() 을 추가해야한다는 것을 알고 있어야합니다.

보다 정교한 케이스를 위해, JUnit은 ExpectedException @Rule 을 가지고 있습니다.이 @Rule 은이 정보도 테스트 할 수 있으며 다음과 같이 사용됩니다 :

public class SimpleExpectedExceptionTest {
     @Rule
     public ExpectedException expectedException = ExpectedException.none();

     @Test
     public void throwsNothing() {
         // no exception expected, none thrown: passes.
     }

     @Test
     public void throwsExceptionWithSpecificType() {
         expectedException.expect(NullPointerException.class);

         throw new NullPointerException();
     }

     @Test
     public void throwsExceptionWithSpecificTypeAndMessage() {
         expectedException.expect(IllegalArgumentException.class);
         expectedException.expectMessage("Wanted a donut.");

         throw new IllegalArgumentException("Wanted a donut.");
     }
}
 

JUnit5의 예외 테스트

JUnit 5에서 동일한 결과를 얻으려면 완전히 새로운 메커니즘 을 사용하십시오.

시험 된 방법

public class Calculator {
    public double divide(double a, double b) {
        if (b == 0.0) {
            throw new IllegalArgumentException("Divider must not be 0");
        }
        return a/b;
    }
}
 

시험 방법

public class CalculatorTest {
    @Test
    void triangularMinus5() { // The test method does not have to be public in JUnit5
        Calculator calc = new Calculator();

        IllegalArgumentException thrown = assertThrows(
            IllegalArgumentException.class, 
            () -> calculator.divide(42.0, 0.0));
        // If the exception has not been thrown, the above test has failed.

        // And now you may further inspect the returned exception...
        // ...e.g. like this:
        assertEquals("Divider must not be 0", thrown.getMessage());
}
 

테스트 무시하기

테스트를 무시하려면 테스트에 @Ignore 주석을 추가하고 선택적으로 이유를 사용하여 주석에 매개 변수를 제공하십시오.

@Ignore("Calculator add not implemented yet.")
@Test
public void testPlus() {
    assertEquals(5, calculator.add(2,3));
}
 

테스트 주석을 @Test 주석을 제거하는 것과 비교할 때, 테스트 러너는 여전히이 테스트를보고하고 무시됩니다.

JUnit 가정 을 사용하여 조건 적으로 테스트 사례를 무시할 수도 있습니다. 샘플 유스 케이스는 개발자가 특정 버그를 수정 한 후에 만 ​​테스트 케이스를 실행하는 것입니다. 예:

import org.junit.Assume;
import org.junit.Assert;
...

@Test 
public void testForBug1234() {

    Assume.assumeTrue(isBugFixed(1234));//will not run this test until the bug 1234 is fixed

    Assert.assertEquals(5, calculator.add(2,3));
}
 

기본 러너는 실패한 가정을 가진 테스트를 무시한 것으로 간주합니다. 다른 주자가 다르게 행동 할 수도 있습니다 (예 : 통과 한 것으로 간주).

JUnit - 기본 주석 예제

이해해야 할 몇 가지 기본 JUnit 주석은 다음과 같습니다.

@BeforeClass – Run once before any of the test methods in the class, public static void 
@AfterClass – Run once after all the tests in the class has been run, public static void
@Before – Run before @Test, public void
@After – Run after @Test, public void
@Test – This is the test method to run, public void