-
[Java] JUnit5μ΄λ? JUnit ν μ€νΈ λ°©λ²Android/Java 2021. 1. 13. 20:11λ°μν
- μ΄ κΈμ "μ¨λΌμΈ μλ° μ€ν°λ λ΄μ©"μ μ 리ν κΈμ λλ€.
JUnit5λ?
- JUnitμ μλ° νλ‘κ·Έλλ°μ© λ¨μ ν μ€νΈλ₯Ό ν μ μλ νλ μμν¬μ λλ€.
- μμ¦ νλ‘κ·Έλλ°μμλ ν μ€νΈ μ£Όλ κ°λ° λ©΄μμ μ€μμ μ΄ λΆκ°λ λ§νΌ νμ΅ν νμκ° μμ΅λλ€.
- JUnit5μ μ΄μ λ²μ κ³Όλ λ¬λ¦¬, JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage μ¬λ¬ κ°μ λͺ¨λλ‘ κ΅¬μ±λμμ΅λλ€.
JUnit Platform
- JUnit Platform μ JVMμμ ν μ€νΈ νλ μμν¬λ₯Ό μμνκΈ° μν κΈ°λ°μ μ 곡ν©λλ€.
- λν, νλ«νΌμμ μ€νλλ ν μ€νΈ νλ μ μν¬ κ°λ°μ μν TestEngine APIλ₯Ό μ μν©λλ€.
- λͺ¨λκ° μ μλ IDEs(Intellj, Eclipse, VS Code), λΉλ λꡬ(Gradle, Maven, Ant) μμλ JUnit Platformμ μ§μν©λλ€.
JUnit Jupiter
- JUnit Jupiterλ JUnit5μμ ν μ€νΈ μμ±μ μν μλ‘μ΄ νλ‘κ·Έλλ° λͺ¨λΈκ³Ό νμ₯ λͺ¨λΈ μ‘°ν©μ λλ€.
- μ¦, ν μ€νΈλ₯Ό νκΈ° μν κ²λ€μ΄ ν¬ν¨λμ΄ μλ€κ³ μκ°νλ©΄ λ©λλ€.
JUnit Vintage
- νλ«νΌμμ JUnit3, JUnit4κΈ°λ°ν ν μ€νΈ μ½λκ° μ€νλ μ μλ TeseEngineμ μ 곡ν©λλ€.
JUnit5 Dependecny
μ λ Intelljλ₯Ό μ£Όλ‘ μ¬μ©νκΈ° λλ¬Έμ Intelljμ JUnit5λ₯Ό μ¬μ©νλλ‘ νκ² μ΅λλ€.
test { useJUnitPlatform() }
- λ¨Όμ build.gradleμ μμ μ½λλ₯Ό μ λ ₯νμ¬, JUnit Platformμ μ¬μ©ν μ μλλ‘ λ³κ²½ν©λλ€.
- μ°Έκ³ (https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/Test.html#useJUnitPlatform--)
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' }
- Gradleμ JUnit Jupiterλ₯Ό ν μ μλλ‘ λ€μκ³Ό κ°μ μμ‘΄μ±μ μΆκ°ν΄μΌ ν©λλ€.
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testCompileOnly 'junit:junit:4.13' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' }
- JUnit Platformμ JUnit 3/4λ₯Ό μ€ννκΈ°λ₯Ό μνλ€λ©΄ JUnit Vintage Engine μμ‘΄μ±μ μΆκ°ν΄μΌ ν©λλ€.
- μ°Έμ‘°(https://docs.gradle.org/current/userguide/java_testing.html#using_junit5)
Annotations
JUnit Jupiterλ ν μ€νΈλ₯Ό ꡬμ±νκΈ° μν λ€μμ annotationμ μ§μν©λλ€.
- @Test : λ©μλκ° ν μ€νΈ λ©μλμμ λνλ λλ€.
- @ParameterizedTest : λ©μλκ° λ§€κ° λ³μκ° μλ ν μ€νΈμμ λνλ λλ€.
- @RepeatedTest : λ°λ³΅ ν μ€νΈλ₯Ό μν λ©μλμμ λνλ λλ€.
- @TestFactory : λμ ν μ€νΈλ₯Ό μν ν μ€νΈ ν©ν 리 λ©μλλ₯Ό λνλ λλ€.
- @TestTemplate : μ¬λ¬λ² νΈμΆλλλ‘ μ€κ³λ ν μ€νΈ μΌμ΄μ€μ ν νλ¦Ώμμ λνλ λλ€.
- @TestMethodOrder : ν μ€νΈ λ©μλ μ€μ μμλ₯Ό ꡬμ±νλλ° μ¬μ©λ©λλ€.
- @TestInstance : ν μ€νΈ λΌμ΄ν μ¬μ΄νμ ꡬμ±νλλ° μ¬μ©λ©λλ€.
- @DisplayName : ν μ€νΈ ν΄λμ€ λλ ν μ€νΈ λ©μλμ λν μ¬μ©μ μ§μ νμ μ΄λ¦μ μ€μ ν©λλ€.
- @DisplayNameGeneration : ν μ€νΈ ν΄λμ€μ λν 컀μ€ν μ΄λ¦ μμ±κΈ°λ₯Ό μμ±ν©λλ€.
- @BeforeEach : λͺ¨λ ν μ€νΈ λ©μλ μ€ν μ μ μ€νλλ λ©μλμ λλ€.
- @AfterEach : λͺ¨λ ν μ€νΈ λ©μλ μ€νμ΄ λλλ©΄ μ€νλλ λ©μλμ λλ€.
- @BeforeAll : νλμ ν μ€νΈ μ€ν μ μ μ€νλλ λ©μλμ λλ€.
- @AfterAll : νλμ ν μ€νΈ μ€νμ΄ λλλ©΄ μ€νλλ λ©μλμ λλ€.
- @Nested : non-static μ€μ²© ν΄λμ€μμ λνλ λλ€.
- @Tag : μλ‘μ΄ νκ·Έλ₯Ό μ μΈν λ μ¬μ©λ©λλ€.
- @Disable : ν μ€νΈ ν΄λμ€λ ν μ€νΈ λ©μλλ₯Ό μ¬μ©νμ§ μλλ‘ ν λ μ¬μ©λ©λλ€.
- @Timeout : μ£Όμ΄μ§ μκ°μμ μ€νμ λͺ»ν κ²½μ° μ€ν¨νλλ‘ νλλ° μ¬μ©λ©λλ€.
Meta Annotation
JUnit Jupiter annotationμ meta-annotationμ μ¬μ©ν©λλ€. meta-annotationμ μμ μ΄ μ§μ annotationμ μ μν μ μλ€λ κ²μ μλ―Έν©λλ€.
@Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Test() @Tag("fast") @interface Fast{ } class CalculatorTest { Calculator c = new Calculator(); int a = 20; int b = 10; @Test() void sum(){ assertEquals(30,c.sum(a,b)); } @Fast() void sum2(){ assertEquals(30,c.sum(a,b)); } }
- @Tag("fast") λ₯Ό ν΅ν΄ FastλΌλ annotationμ μ μνμκ³ Test ν΄λμ€μμ μ°λ μμμ λλ€.
- @Fast annotationμμλ @Testλ μκΈ° λλ¬Έμ ν μ€νΈλ₯Ό μ€ννλ κ²μ νμΈνμμ΅λλ€.
ν μ€νΈ ν΄λμ€μ ν μ€νΈ λ©μλ
Test Class : μ΅μν νλμ ν μ€νΈ λ©μλκ° ν¬ν¨λ μ μ λ©μλ ν΄λμ€ λλ μ€μ²© ν΄λμ€μ λλ€. ν μ€νΈ ν΄λμ€λ μΆμ ν΄λμ€κ° λλ©΄ μλκ³ νλμ μμ±μλ κΌ κ°μ ΈμΌ ν©λλ€.
Test Method : @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplateκ° μ΄λ Έν μ΄μ λ λ©μλμ λλ€.
Lifecycle Method : @BeforeAll, @AfterAll, @BeforeEach, or @AfterEachκ° μ΄λ Έν μ΄μ λ λ©μλμ λλ€.
Test Methodμ Lifecycle Methodλ νμ¬ ν΄λμ€ λ΄μμ μ μΈλκ±°λ, μνΌν΄λμ€μ μμλκ±°λ, μΈν°νμ΄μ€μμ μμ λ μ μμ΅λλ€.
class CalculatorTest { Calculator c = new Calculator(); int a = 20; int b = 10; @BeforeAll static void start(){ System.out.println("start!"); } @BeforeEach void methodStart(){ System.out.println("method start"); } @Test @DisplayName("SUM") void sum() { assertEquals(30,c.sum(a,b)); } @Test @Disabled() void sub() { assertEquals(10,c.sub(a,b)); } @Test void mul() { assertEquals(200,c.mul(a,b)); } @Test void div() { assertEquals(2,c.div(a,b)); } @ParameterizedTest @ValueSource(ints = {2,4,6,8}) void paramTest(int num){ assertEquals(0,num%2); } @AfterEach() void methodFinish(){ System.out.println("method finish"); } @AfterAll() static void finish(){ System.out.println("finish"); } }
Assert Method
- assertEquals(x,y) : κ°μ²΄ x,yκ° μΌμΉν¨μ νμΈν©λλ€.
- assertArayEquals(a,b) : λ°°μ΄ Aμ Bκ° μΌμΉν¨μ νμΈν©λλ€.
- assertFalse(x) : xκ° falseμΈμ§ νμΈν©λλ€.
- assertTrue(x) : xκ° TrueμΈμ§ νμΈν©λλ€.
- assertNull(x) : κ°μ²΄ xκ° nullμΈμ§ νμΈν©λλ€.
- seertNotNull(x) : κ°μ²΄ xκ° nullμ΄ μλμ§ νμΈν©λλ€.
- assertSame(x,y) : κ°μ²΄ xμ yκ° κ°μ κ°μ²΄μ λ νΌλ°μ€μμ νμΈν©λλ€. (30 != 30.0)
- asswertNotSame(x,y) : κ°μ²΄ xμ yκ° κ°μ κ°μ²΄μ λ νΌλ°μ€κ° μλμ§ νμΈν©λλ€.
- asserfail() : ν μ€νΈλ₯Ό μ€ν¨ μ²λ¦¬ν©λλ€.
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] 쑰건문(if, else, else if), λ°λ³΅λ¬Έ(for, while) (0) 2021.01.15 [Java] Github API μ¬μ©λ² (0) 2021.01.14 [Java] μ°μ°μ (μ°μ , λΉνΈ, κ΄κ³, λ Όλ¦¬) (0) 2021.01.12 [Java] μλ° λ°μ΄ν° νμ , λ³μ κ·Έλ¦¬κ³ λ°°μ΄ (0) 2021.01.11 [Java] JVMμ΄λ? μλ° μ½λ μ€ν (0) 2021.01.11