junit 튜토리얼
junit 시작하기
수색…
비고
JUnit은 Java 프로그래밍 언어에 대한 반복 가능한 테스트를 작성하는 간단한 프레임 워크입니다. 단위 테스트 프레임 워크를위한 xUnit 아키텍처의 인스턴스입니다.
주요 기능 구성 :
- 테스트에서 값을 테스트하는 방법을 사용자 정의 할 수있는 어설 션
- 테스트 주자 - 클래스에서 테스트를 실행하는 방법을 지정할 수 있습니다.
- 클래스의 테스트 동작을 유연하게 수정할 수있는 규칙
- 스위트 는 다양한 클래스의 테스트 세트를 함께 구성 할 수있게 해줍니다.
JUnit을위한 유용한 확장 기능 :
버전
번역 | 출시일 |
---|---|
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
기본 단위 테스트 예제
이 예제는 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());
}
}
@전 후
@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
제로 인수.
예상 예외 잡기
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