์๋ฐ๋ค์(Javaๅค่ญ) 1ํธ.
1. โmainClassNameโ ์์ฑ ์ถ๊ฐ.
๋ฉ์ธ ํด๋์ค์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ ์์ฑ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ด๊ธฐ ์ง์
์ ์ ์ง์ ํด์ค๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
-
application
๋ธ๋ก ์์ ๋ฉ์ธ ํด๋์ค ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์ธ ํด๋์ค๊ฐcom.example.Main
์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. - ์๋์ ์ฝ๋๋
bundle.gradle
ํ์ผ ๋ด๋ถ์์ ์์ ํด์ผ ํฉ๋๋ค.
plugins {
id 'java'
id 'application'
}
application {
mainClassName = 'com.example.Main' // ์ฌ๊ธฐ์ ๋ฉ์ธ ํด๋์ค์ ๊ฒฝ๋ก๋ฅผ ์
๋ ฅํฉ๋๋ค.
applicationDefaultJvmArgs = [
"-XX:+EnableDynamicAgentLoading",
"-Djdk.instrument.traceUsage"
]
}
repositories {
mavenCentral()
}
dependencies {
// Your dependencies here
}
๋ฉ์ธ ํด๋์ค ์์
- ์๋ฅผ ๋ค์ด, ๋ฉ์ธ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฒผ์ ์ ์์ต๋๋ค.
package com.example;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
2. @ExtendWith
์ด๋
ธํ
์ด์
.
-
@ExtendWith
์ด๋ ธํ ์ด์ ์ Junit 5์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก, ํ ์คํธ ํด๋์ค๋ ๋ฉ์๋์ ํ์ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ํด์ค๋๋ค. - JUnit 5์ ํ์ฅ ๋ชจ๋ธ์ ๋ค์ํ ํ์ฅ ๊ธฐ๋ฅ์ ํตํด ํ ์คํธ ์คํ์ ํน์ ์ง์ ์์ ์ฌ์ฉ์ ์ ์ ๋์์ ์ํํ ์ ์๊ฒ ํฉ๋๋ค.
@ExtendWith
์ด๋
ธํ
์ด์
์ ์ญํ
-
ํ์ฅ ํด๋์ค ์ง์ :
@ExtendWith
์ด๋ ธํ ์ด์ ์ ํ์ฅ ํด๋์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ง์ ๋ ํ์ฅ ํด๋์ค๋ ํ ์คํธ ๋ผ์ดํ์ฌ์ดํด์ ํน์ ์ง์ ์์ ํธ์ถ๋ฉ๋๋ค.- ์๋ฅผ ๋ค์ด, ํ ์คํธ ์คํ ์ ํ, ๊ฐ ํ ์คํธ ๋ฉ์๋ ์ ํ ๋ฑ ๋ค์ํ ์์ ์์ ํน์ ๋์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
-
์ปจํ ์คํธ ์ค์ ๋ฐ ์ฃผ์ : ํ์ฅ ๊ธฐ๋ฅ์ ํตํด ํ ์คํธ ์ปจํ ์คํธ๋ฅผ ์ค์ ํ๊ณ , ํ ์คํธ ๋ฉ์๋์ ํ์ํ ๊ฐ์ฒด๋ ๋ฆฌ์์ค๋ฅผ ์ฃผ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ ์คํธ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ๋ชจ๋ํํ ์ ์์ต๋๋ค.
-
์กฐ๊ฑด๋ถ ์คํ : ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ
์คํธ ๋ฉ์๋๋ฅผ ์คํํ๊ฑฐ๋ ๊ฑด๋๋ธ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํน์ ํ๊ฒฝ ์ค์ ์ด๋ ์์คํ ์ํ์ ๋ฐ๋ผ ํ ์คํธ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
- ์ปค์คํ ์ด์์ ๋ฐ ๋ณด๊ณ : ํ์ฅ์ ํตํด ์ฌ์ฉ์ ์ ์ ์ด์์ ๋ก์ง์ ์ถ๊ฐํ๊ฑฐ๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ปค์คํ ๋ฐฉ์์ผ๋ก ๋ณด๊ณ ํ ์ ์์ต๋๋ค.
์์ ์ฝ๋
์๋๋ @ExtendWith
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ๊ฐ๋จํ ์์ ์
๋๋ค.
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.Test;
class MyExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
System.out.println("Before each test method");
}
}
@ExtendWith(MyExtension.class)
public class MyTest {
@Test
void testMethod1() {
System.out.println("Test method 1");
}
@Test
void testMethod2() {
System.out.println("Test method 2");
}
}
- ์ ์ฝ๋์์
MyExtension
ํด๋์ค๋BeforeEachCallback
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๊ฐ ํ ์คํธ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค. -
@ExtendWith(MyExtension.class)
์ด๋ ธํ ์ด์ ์ ํตํดMyTest
ํด๋์ค์ ์ด ํ์ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.- ๋ฐ๋ผ์ ๊ฐ ํ ์คํธ ๋ฉ์๋ ์คํ ์ ์ โBefore each test methodโ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
- ์ด์ฒ๋ผ
@ExtendWith
์ด๋ ธํ ์ด์ ์ JUnit 5์ ํ์ฅ ๋ชจ๋ธ์ ํ์ฉํ์ฌ ํ ์คํธ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๊ฒ ํด์ค๋๋ค.
3. ์ด์์ (Assertion)
- ์ด์์ (Assertion)์ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ํํธ์จ์ด ํ ์คํธ์์ ์ฝ๋์ ํน์ ์ํ๋ ์กฐ๊ฑด์ด ์ฐธ์ธ์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์ฅ์ด๋ ๋ช ๋ น๋ฌธ์ ์๋ฏธํฉ๋๋ค.
- ์ด์์ ์ ํตํด ์ฝ๋์ ๋ ผ๋ฆฌ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ๊ฒ์ฆํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ๋๋ฒ๊น ๊ณผ ํ ์คํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ๊ณผ ๋ชฉ์ .
-
์กฐ๊ฑด ๊ฒ์ฆ : ์ด์์ (Assertion)์ ํน์ ์กฐ๊ฑด์ด ์ฐธ์ธ์ง ๊ฒ์ฆํฉ๋๋ค. ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด๋ฉด ํ๋ก๊ทธ๋จ์ ์ฆ์ ์คํ์ ์ค๋จํ๊ณ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
-
๋๋ฒ๊น ๋๊ตฌ : ์ด์์ (Assertion)์ ๊ฐ๋ฐ ์ค์ ์ฝ๋์ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ฝ๋์ ๊ฐ์ ์ด ์๋ชป๋ ๊ฒฝ์ฐ ์ด์์ ์ ํตํด ๋ฌธ์ ๋ฅผ ๋นจ๋ฆฌ ์ฐพ์ ์ ์์ต๋๋ค.
-
๋ฌธ์ํ : ์ด์์ (Assertion)์ ์ฝ๋์ ๋ ผ๋ฆฌ์ ์ ์ ์กฐ๊ฑด์ ๋ช ์์ ์ผ๋ก ํํํ์ฌ, ์ฝ๋๊ฐ ์ด๋ค ์ํ์ ์๋ํด์ผ ํ๋์ง ๋ช ํํ๊ฒ ๋ํ๋ ๋๋ค.
์ด์์ (Assertion)์ ์
-
์๋ฐ(Java)
public void setAge(int age) { assert age > 0 : "Age must be positive"; this.age = age; }
-
JUnit (Java)
```java
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class MyTest {
@Test
void testAddition() {
int result = 2 + 3;
assertEquals(5, result, "2 + 3 should equal 5");
} } ```
์ด์์ ์ฌ์ฉ ์๊ธฐ
- ๊ฐ๋ฐ ์ค : ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ๋ ผ๋ฆฌ์ ์ผ๊ด์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. ๋๋ฒ๊น ๊ณผ์ ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋ณดํต ๋นํ์ฑํํฉ๋๋ค.
- ํ ์คํธ ์ฝ๋ : ํ ์คํธ ํ๋ ์์ํฌ(JUnit, TestNG ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์์ฑํ ๋, ํน์ ์กฐ๊ฑด์ด ๊ธฐ๋ํ ๋๋ก ๋์ํ๋์ง ํ์ธํฉ๋๋ค.
์ฃผ์ ์ฌํญ
- ํ๋ก๋์ ์ฝ๋์์์ ์ฌ์ฉ : ์ด์์ ์ ์ฃผ๋ก ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ฉฐ, ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋นํ์ฑํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์กฐ๊ฑด ๊ฒ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ถ์์ฉ ์๋ ์ฝ๋ : ์ด์์ ๋ด๋ถ์์๋ ๋ถ์์ฉ์ด ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด์์ ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์กฐ๊ฑด๋ง ๊ฒ์ฆํด์ผ ํฉ๋๋ค.
์์ฝ.
- ์ด์์
์ ์ฝ๋์ ํน์ ์กฐ๊ฑด์ด ์ฐธ์์ ๊ฒ์ฆํ๋ ๋๊ตฌ๋ก, ๋๋ฒ๊น
๊ณผ ํ
์คํธ ๊ณผ์ ์์ ์ฝ๋์ ๋
ผ๋ฆฌ์ ์ผ๊ด์ฑ์ ์ ์งํ๋๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ฝ๋์ ๊ฐ์ ๊ณผ ์ค์ ๋์์ด ์ผ์นํ๋์ง ํ์ธํ๊ณ , ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ์ฌ ์์ ํ ์ ์์ต๋๋ค.