BackEnd/JUnit
-
JUnit 5. JUnit 설정 파일BackEnd/JUnit 2022. 2. 3. 18:50
JUnit 설정 파일(junit-platform.properties)을 생성 후 classpath root(src/test/resources/)에 넣어두면 설정 값이 자동 적용됩니다. 설정 가능한 값은 아래 목록을 참고하시면 됩니다. junit.jupiter.testinstance.lifecycle.default = per_class: 테스트 인스턴스 라이프사이클 설정 junit.jupiter.extensions.autodetection.enabled = true: 확장팩 자동 감지 기능 junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition: @Disabled 무시하고 실행하기 junit.jupiter.displayname.generato..
-
JUnit 5. ExtensionBackEnd/JUnit 2022. 2. 3. 18:39
JUnit 4의 확장은 @RunWith(Runner), TestRule, MethodRule이 존재하지만, JUnit 5의 확장은 Extension 단 하나입니다. 등록 방법은 선언적인 등록(@ExtendWith), 프로그래밍 등록(@RegisterExtension) 및 자동 등록 (자바 ServiceLoader 이용)이 존재합니다. Extension을 사용하기 위해 수행시간이 1초 이상 걸리는 메소드를 찾는 클래스를 생성합니다(라이프사이클 콜백 구현). 1초 이상 걸리는 메소드의 경우 "Please consider refactoring 메소드명 method."가 출력됩니다. package com.java.JUnit5.extensions; import org.junit.jupiter.api.extensi..
-
JUnit 5. 테스트 순서BackEnd/JUnit 2022. 2. 3. 18:15
테스트 인스턴스를 테스트마다 새롭게 생성하기 때문에 테스트 메소드들의 실행 순서는 보장되지 않습니다. 경우에 따라 특정 순서대로 테스트를 실행하고 싶을 때가 존재합니다. 그런 경우 @TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder를 사용할 수 있습니다. OrderAnnotation은 낮은 값일수록 높은 우선순위를 갖습니다. package com.java.JUnit5; import org.junit.jupiter.api.*; @TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class OrderTests { int..
-
JUnit 5. 테스트 인스턴스BackEnd/JUnit 2022. 2. 3. 17:50
JUnit은 기본 전략으로 테스트 메소드마다 테스트 인스턴스를 새로 만듭니다. 테스트간 의존성을 없애고 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함입니다. 아래 코드에서 value 값을 증가시키기 때문에 1, 2, 3이 출력되어야 할 것 같지만 결과는 모두 1이 출력됩니다. package com.java.JUnit5; import org.junit.jupiter.api.Test; public class InstanceTests { int value = 1; @Test void printOne() { System.out.println(value++); // [결과]: 1 } @Test void printTwo() { System.out.println(value++); // [결과]: 1 } @T..
-
JUnit 5. 반복문BackEnd/JUnit 2022. 2. 3. 17:31
@RepeatedTest 반복 횟수와 반복 테스트 이름을 설정할 수 있으며, RepetitionInfo 타입의 인자를 받을 수 있습니다. @RepeatedTest 애노테이션 안에 value는 반복 횟수를, name은 테스트 이름입니다. 테스트 이름 지정 시 아래와 같이 placeholder를 지정할 수 있습니다. @DisplayName("반복") @RepeatedTest(value = 10, name = "{displayName}, {currentRepetition}/{totalRepetitions}") void repeatTest(RepetitionInfo repetitionInfo) { System.out.println("test " + repetitionInfo.getCurrentRepetition..
-
JUnit 5. TagBackEnd/JUnit 2022. 1. 31. 12:25
Tag는 테스트 그룹을 만들고 원하는 테스트 그룹만 실행할 수 있습니다. @Tag 애노테이션을 사용하며 테스트 메소드에 추가하여 사용합니다. 하나의 테스트 메소드에 여러 태그를 사용할 수 있습니다. package com.java.JUnit5; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; public class TagTests { @Test @Tag("local") void tagLocalTest() { System.out.println("local"); } @Test @Tag("testci") void tagTestCiTest() { System.out.println("testci"); } } IntelliJ에서 특정 태그로 ..
-
JUnit 5. 조건문BackEnd/JUnit 2022. 1. 31. 11:47
Assumptions는 테스트 메소드가 특정 조건에 대해서만 실행하고자 할 때 사용합니다. assumeTrue(조건) asuumeFalse(조건) assumingThat(조건, 테스트) @Enabled___ 와 @Disabled___ 는 특정 환경에 대해서만 테스트를 실행하고자 할 때 사용합니다. OnOS: 특정 OS 에서만 실행합니다. OnJre: 특정 Jre 버전에서만 실행합니다. IfEnvironmentVariable: 특정 환경변수 값에서만 실행합니다. package com.java.JUnit5; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.*; import static org.junit.jupiter.api...
-
JUnit 5. AssertionBackEnd/JUnit 2022. 1. 30. 17:05
import static org.junit.jupiter.api.Assertions.*; assertEqulas(expected, actual): 실제 값과 기대한 값이 같은지 확인합니다. assertNotNull(actual): 값이 null이 아닌지 확인합니다. assertTrue(boolean): 조건이 참(true)인지 확인합니다. assertAll(executables...): 모든 구문을 확인합니다. (기본적으로 예외 발생 시 더이상 실행이 되지 않습니다.) assertThrows(expectedType, executable): 예외가 발생되었는지 확인합니다. assertTimeout(duration, executable): 특정 시간 안에 실행이 완료되었는지 확인합니다. package com..