JUnit 예제가 포함된 주석 튜토리얼: @Test 및 @After란 무엇입니까?
⚡ 스마트 요약
JUnit 주석은 구문 메타데이터의 한 형태로, 추가되는 내용입니다. Java 소스 코드를 통해 테스트 실행기는 어떤 메서드를 실행해야 하는지, 언제 실행해야 하는지, 각 메서드 실행에 얼마나 시간이 걸리는지 알 수 있습니다.

JUnit 주석?
JUnit 주석 구문 메타데이터의 특별한 형태로, 추가할 수 있습니다. Java 소스 코드의 가독성과 구조를 개선하기 위해 어노테이션을 사용할 수 있습니다. 변수, 매개변수, 패키지, 메서드 및 클래스에 어노테이션을 추가할 수 있습니다. 어노테이션은 에서 도입되었습니다. JUnit 4, 즉 Java 코드가 더 읽기 쉽고 간결해집니다. 이것이 가장 큰 차이점입니다. JUnit 3 및 JUnit 4: JUnit 4는 주석 기반입니다.
이러한 주석에 대한 실무 지식을 갖추면 누구나 쉽게 학습하고 구현할 수 있습니다. JUnit 시험. 다음은 중요하고 자주 사용되는 내용입니다. JUnit 주석 목록, 포함 JUnit 각각 옆에 있는 5(목성)에 해당하는 것:
| S.No. | 주석 | 기술설명 | JUnit 5등가 |
|---|---|---|---|
| 1. | @테스트 | 이 어노테이션은 `junit.framework.TestCase`를 대체하며, 이 어노테이션이 붙은 공개 void 메서드를 테스트 케이스로 실행할 수 있음을 나타냅니다. | @테스트(org.junit.jupiter.api) |
| 2. | @전에 | 이 주석은 각 테스트 사례 전에 전제 조건과 같은 일부 명령문을 실행하려는 경우에 사용됩니다. | @BeforeEach |
| 3. | 뿡 빵뀨 | 이 어노테이션은 모든 테스트 케이스보다 먼저 특정 구문을 실행하려는 경우에 사용됩니다. 예를 들어 모든 테스트 케이스보다 먼저 열려야 하는 테스트 연결을 실행하는 경우에 사용할 수 있습니다. | @BeforeAll |
| 4. | @후에 | 이 주석은 각 명령문 이후에 일부 명령문을 실행하려는 경우 사용할 수 있습니다. 테스트 케이스예를 들어 변수를 초기화하거나 임시 파일을 삭제하는 것 등이 있습니다. | @AfterEach |
| 5. | @방과후 | 이 어노테이션은 모든 테스트 케이스 실행 후 특정 명령문을 실행하려는 경우, 예를 들어 모든 테스트 케이스 실행 후 리소스를 해제하는 경우에 사용할 수 있습니다. | @결국 |
| 6. | @무시하다 | 이 어노테이션은 테스트 실행 중에 특정 구문을 무시하려는 경우, 예를 들어 테스트 실행 중에 일부 테스트 케이스를 비활성화하려는 경우에 사용할 수 있습니다. | @장애가 있는 |
| 7. | @Test(타임아웃=500) | 이 어노테이션은 테스트 실행 중에 타임아웃을 설정하려는 경우, 예를 들어 SLA(서비스 수준 계약)에 따라 작업을 수행하고 지정된 시간 내에 테스트를 완료해야 하는 경우에 사용할 수 있습니다. | @Timeout 또는 assertTimeout |
| 8. | @Test(예상=IllegalArgumentException.class) | 이 어노테이션은 테스트 실행 중에 예외를 처리하려는 경우에 사용할 수 있습니다. 예를 들어 특정 메서드가 지정된 예외를 발생시키는지 여부를 확인하려는 경우에 유용합니다. | 어설트쓰로우 |
JUnit 주석 예
중요한 내용을 다루는 클래스를 만들어 보겠습니다. JUnit 간단한 인쇄 문으로 주석을 추가하고 테스트 실행기 클래스로 실행합니다.
단계 1) 아래 사항을 고려하십시오. Java 위에 나열된 어노테이션이 연결된 다양한 메서드를 가진 클래스:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
단계 2) 위 테스트를 실행할 테스트 러너 클래스를 만들어 보겠습니다.
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
예상 결과
- 모든 테스트 케이스는 하나씩 순차적으로 실행되며, 모든 출력문은 콘솔에서 확인할 수 있습니다.
- 위 표에서 논의된 바와 같이, @Before와 @BeforeClass는 JUnit [메서드 m2() 및 m1()]은 각각 각 테스트 케이스 실행 전과 모든 테스트 케이스 실행 전에 실행됩니다.
- 마찬가지로 @After와 @AfterClass도 마찬가지입니다. JUnit (메서드 m4() 및 m3())는 각각 각 테스트 케이스 실행 후와 모든 테스트 케이스 실행 후에 실행됩니다. @Ignore (메서드 m6())는 해당 테스트를 무시하는 것으로 간주됩니다.
위에서 사용된 테스트 케이스들을 분석해 보겠습니다. Java 수업 상세 내용:
- 아래에 제시된 m5() 메서드를 고려하십시오.
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
위 방법에서는 문자열을 "list" 변수에 추가합니다.
- 목록.isEmpty() 거짓을 반환합니다.
- 주장False(list.isEmpty()) true를 반환해야 합니다.
- 결과적으로 테스트 케이스는 패스.
리스트에 문자열을 하나만 추가했으므로 크기는 1입니다.
- 목록.크기() 정수 값 "1"을 반환해야 합니다.
- So 주장Equals(1, list.size()) true를 반환해야 합니다.
- 결과적으로 테스트 케이스는 패스.
- 아래에 제시된 m7() 메서드를 고려하십시오.
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
상기 한 바와 같이, @Test(시간 초과 = 10) 이 값은 테스트 케이스에서 타임아웃을 적용하는 데 사용됩니다. 값은 밀리초 단위이므로 m7() 함수는 10ms 이내에 완료되어야 합니다.
- 아래에 제시된 m8() 메서드를 고려하십시오.
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
상기 한 바와 같이, @테스트(예상) 해당 메서드는 실행 중에 지정된 예외를 확인하므로, m8() 메서드는 "해당 메서드가 없습니다 예외"를 발생시킵니다. 결과적으로 테스트는 예외와 함께 실행됩니다.
정확도 참고: m8() 함수는 한 줄만 출력하므로 선언된 예외는 실제로 발생하지 않습니다. JUnit 4번 항목은 테스트가 실패했다고 보고합니다. 예상되는 유형과 메서드가 실제로 던지는 예외 유형을 일치시키세요. JUnit 5는 이것을 다음과 같이 씁니다. 어설트쓰로우.
모든 테스트 케이스가 통과되면 성공적인 테스트 실행이 이루어집니다.
실제 결과
위 예시에는 테스트 케이스가 세 개 있으므로 모든 테스트 케이스가 하나씩 순차적으로 실행됩니다. 아래 콘솔 스크린샷을 참조하세요.

콘솔에서 볼 수 있는 아래 인쇄 문을 참조하세요.
@BeforeClass를 사용하여 모든 테스트 케이스 이전에 실행됨
@Before 주석을 사용하여 각 테스트 사례 전에 실행됩니다.
@After를 사용하여 각 테스트 사례 후에 실행됩니다.
@Before 주석을 사용하여 각 테스트 사례 전에 실행됩니다.
@Test(timeout)를 사용하면 시간 초과를 적용하는 데 사용할 수 있습니다. JUnit4개의 테스트 케이스
@After를 사용하여 각 테스트 사례 후에 실행됩니다.
@Before 주석을 사용하여 각 테스트 사례 전에 실행됩니다.
@Test(expected)를 사용하여 실행 중에 지정된 예외를 확인합니다.
@After를 사용하여 각 테스트 사례 후에 실행됩니다.
@AfterClass를 사용하여 모든 테스트 케이스 후에 실행됨
JUnit 어설션 클래스
어노테이션은 메서드가 실행되는 시점을 결정하고, 어설션 메서드는 메서드가 통과하는지 여부를 결정합니다.
이 클래스는 테스트 케이스 작성에 유용한 다양한 어설션 메서드를 제공합니다. 모든 어설션 문이 통과하면 테스트 결과는 성공입니다. 하나라도 어설션 문이 실패하면 테스트 결과는 실패입니다. 전용 클래스는 테스트 케이스 작성에 유용합니다. JUnit 단언하다 이 튜토리얼에서는 각 방법을 자세히 다룹니다.
앞서 보셨듯이 아래 표는 중요한 Assert 메서드와 그 설명을 나타냅니다.
| S.No. | 방법 | 기술설명 |
|---|---|---|
| 1. | void AssertEquals(예상 부울, 실제 부울) | Object 클래스의 equals 메서드와 유사하게 두 값이 같은지 확인합니다. |
| 2. | void AssertFalse(부울 조건) | 이 기능은 조건이 거짓인지 확인하는 것입니다. |
| 3. | void AssertNotNull(객체 객체) | "assertNotNull" 기능은 개체가 null이 아닌지 확인하는 것입니다. |
| 4. | void AssertNull(객체 객체) | "assertNull" 기능은 개체가 null인지 확인하는 것입니다. |
| 5. | void AssertTrue(부울 조건) | "assertTrue" 기능은 조건이 참인지 확인하는 것입니다. |
| 6. | 무효 실패() | 어설션 오류를 발생시키려면 fail() 함수를 사용하면 항상 실패(fail) 판정이 나옵니다. |
| 7. | voidassertSame([문자열 메시지] | "assertSame" 기능은 두 개체가 동일한 개체를 참조하는지 확인하는 것입니다. |
| 8. | void AssertNotSame([문자열 메시지] | "assertNotSame" 기능은 두 개체가 동일한 개체를 참조하지 않는지 확인하는 것입니다. |
JUnit 테스트 케이스 클래스
여러 테스트를 실행하려면 TestCase 클래스를 사용할 수 있습니다. junit.프레임워크 패키지입니다. @Test 어노테이션은 다음과 같은 내용을 알려줍니다. JUnit 이것이 연결된 이 공개된 void 메서드(여기서는 테스트 케이스)를 테스트 케이스로 실행할 수 있다는 것입니다.
버전 참고: 테스트 케이스, 검사 결과 테스트스위트 유산에 속합니다 junit.프레임워크 ~으로부터의 포장 JUnit 3. 해당 테스트들은 여전히 JUnit 4.x 아티팩트 내에 포함되어 배포되지만, 어노테이션 기반 테스트는 TestCase를 확장하지 않습니다.
아래 표는 사용 가능한 몇 가지 중요한 방법을 보여줍니다. junit.framework.테스트케이스 수업:
| S.No. | 방법 | 기술설명 |
|---|---|---|
| 1. | 정수 countTestCases() | 이 방법은 실행된 테스트 케이스의 수를 계산하는 데 사용됩니다. 실행(테스트결과 tr) 방법. |
| 2. | 테스트결과 createResult() | 이 방법은 검사 결과 목적. |
| 3. | 문자열 getName () | 이 메소드는 문자열에 불과한 문자열을 반환합니다. 테스트 케이스 이름입니다. |
| 4. | 테스트결과 실행() | 이 메서드는 테스트를 실행하는 데 사용되며, 테스트는 다음을 반환합니다. 검사 결과 목적. |
| 5. | 무효 실행(TestResult 결과) | 이 방법은 다음과 같은 테스트를 실행하는 데 사용됩니다. 검사 결과 아무것도 반환하지 않는 객체입니다. |
| 6. | void setName (문자열 이름) | 이 메서드는 이름을 설정하는 데 사용됩니다. 테스트케이스. |
| 7. | 무효 설정() | 이 방법은 데이터베이스 연결 생성과 같은 리소스 연결 코드를 작성하는 데 사용됩니다. |
| 8. | 무효 티어다운() | 이 방법은 리소스 해제 코드를 작성하는 데 사용됩니다. 예를 들어 트랜잭션 작업을 수행한 후 데이터베이스 연결을 해제하는 코드입니다. |
JUnit 테스트결과 클래스
테스트를 실행하면 결과가 반환됩니다(다음과 같은 형식으로). 검사 결과 이 TestResult 객체를 사용하여 결과 객체를 분석할 수 있습니다. 테스트 결과는 실패 또는 성공일 수 있습니다.
junit.framework.TestResult 클래스에서 사용되는 주요 메서드는 아래 표를 참조하십시오.
| S.No. | 방법 | 기술설명 |
|---|---|---|
| 1. | void addError(테스트 테스트, Throwable t) | 이 방법은 테스트에 오류를 추가해야 할 때 사용됩니다. |
| 2. | void addFailure(테스트 테스트, AssertionFailedError t) | 이 방법은 실패 목록에 실패를 추가해야 하는 경우에 사용됩니다. |
| 3. | void endTest(테스트 테스트) | 이 메서드는 테스트가 수행(완료)되었음을 알리는 데 사용됩니다. |
| 4. | 정수 오류카운트() | 이 방법은 테스트 실행 중에 감지된 오류를 얻는 데 사용됩니다. |
| 5. | 열거 오류() | 이 메서드는 단순히 오류 모음(여기서는 열거형)을 반환합니다. |
| 6. | 정수 실패카운트() | 이 방법은 테스트 실행 중에 감지된 오류 횟수를 얻는 데 사용됩니다. |
| 7. | 무효 실행(TestCase 테스트) | 이 메소드는 테스트 케이스를 실행하는 데 사용됩니다. |
| 8. | 정수 runCount() | 이 방법은 단순히 실행된 테스트 수를 세는 것입니다. |
| 9. | void startTest(테스트 테스트) | 이 메소드는 테스트가 시작되었음을 알리는 데 사용됩니다. |
| 10. | 무효 정지() | 이 방법은 테스트 실행을 중지하는 데 사용됩니다. |
JUnit 테스트 스위트 클래스
지정된 순서대로 여러 테스트를 실행하려면 모든 테스트를 한 곳에 모으면 됩니다. 이러한 곳을 테스트 스위트라고 합니다. JUnit 테스트 스위트 이 튜토리얼은 전체 예제를 단계별로 안내합니다.
아래 표에서 사용되는 주요 방법을 확인하세요. junit.framework.테스트스위트 수업:
| S.No. | 방법 | 기술설명 |
|---|---|---|
| 1. | void addTest(테스트 테스트) | 이 방법은 제품군에 테스트를 추가하려는 경우에 사용됩니다. |
| 2. | void addTestSuite(클래스 테스트 클래스) | 이 방법은 스위트에 테스트를 추가하면서 클래스를 지정하려는 경우에 사용됩니다. |
| 3. | 정수 countTestCases() | 이 방법은 테스트 케이스의 개수를 세고 싶을 때 사용됩니다. |
| 4. | 문자열 getName () | 이 메소드는 테스트 스위트의 이름을 얻는 데 사용됩니다. |
| 5. | 무효 실행(TestResult 결과) | 이 메서드는 테스트를 실행하고 테스트 결과를 수집하는 데 사용됩니다. 검사 결과 목적. |
| 6. | void setName (문자열 이름) | 이 메서드는 이름을 설정하는 데 사용됩니다. 테스트스위트. |
| 7. | 테스트 testAt(int 인덱스) | 이 메서드는 지정된 인덱스의 테스트 결과를 반환하려는 경우에 사용됩니다. |
| 8. | 정수 테스트카운트() | 이 메서드는 테스트 스위트에 포함된 테스트 수를 반환하려는 경우에 사용됩니다. |
| 9. | 정적 테스트 경고(문자열 메시지) | 이 메소드는 실패하고 경고 메시지를 기록하는 테스트를 반환합니다. |
