728x90
테스트 수행 시 해당 테스트 코드에서 딱 한번만, 아님 함수마다 한번씩만 실행하려 하면 해당 어노테이션을
사용하면 된다.
실행 관련 Annotation
@BeforeAll - 테스트 수행 시 한번만 실행
@BeforeEach - @Test가 붙은 함수 수행 전 실행
@AfterEach - @Test가 붙은 함수 수행 후 실행
@AfterAll - 테스트 종료 시 한번 호출
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class App {
@BeforeAll
static void BeforeAll() {
System.out.println("@BeforeAll : 초기화-한번만 수행");
}
@BeforeEach
void BeforeEach() {
System.out.println("@BeforeEach : 초기화-테스트 하나당 한번씩 수행");
}
@AfterEach
void AfterEach() {
System.out.println("@AfterEach : 종료-테스트 하나당 한번씩 수행");
}
@AfterAll
static void AfterAll() {
System.out.println("@AfterAll : 종료-마지막 수행");
}
@Test void calc_add(){
assertTrue(2==new Calculator().add(1, 1),"덧셈오류");
assertTrue(1==new Calculator().multiple(1, 1),"곱셈오류");
}
@Test void calc_multiple(){
assertTrue(1==new Calculator().multiple(1, 1),"곱셈오류");
}
}
class Calculator {
public int add(int x, int y) { // 덧셈
System.out.println("Calculator-add");
return x + y;
}
public int multiple(int x, int y) {// 곱셈
System.out.println("Calculator-multiple");
return x * y;
}
public double div(int x, int y) {// 나눗셈
System.out.println("Calculator-div");
return x / y;
}
}
실행 결과
@BeforeAll : 초기화-한번만 수행
@BeforeEach : 초기화-테스트 하나당 한번씩 수행
Calculator-multiple
@AfterEach : 종료-테스트 하나당 한번씩 수행
@BeforeEach : 초기화-테스트 하나당 한번씩 수행
Calculator-add
Calculator-multiple
@AfterEach : 종료-테스트 하나당 한번씩 수행
@AfterAll : 종료-마지막 수행
Assert 관련 Annotation
assertAll
모두가 만족해야만 통과된다.
여긴 여러개의 조건을 넣을 수 있고 "()-> {}"조건을 넣어서 직접 함수 구현도 가능하다.
물론 {} 안에 또 함수를 넣을 수도 있다
assertAll("계산오류",
() -> assertEquals(2, new Calculator().add(1, 1)),
() -> assertEquals(1, new Calculator().multiple(1, 1)));
assertAll("계산오류",
() -> {
int a=1;
int b=1;
assertEquals(2, a+b);
},
() -> {
int a=1;
int b=2;
assertAll("내부오류",
()->assertEquals(3,new Calculator().add(a,b),"덧셈오류"),
()->assertTrue(new Calculator().multiple(a,b)==2)
);
}
);
assertThrows
exception이 정상적으로 발생하는지를 체크한다.
가령 당연히 Exception이 발생해야만 하는걸 점검할때는 테스트 코드가 멈춤으로 이걸 사용해서 정상적으로 오류가 발생하는걸
체크할 수 있을것 같다
//Exception이 발생한걸 받아서
Exception exception = assertThrows(ArithmeticException.class, () -> new Calculator().div(1, 0));
//점검한다
assertEquals("/ by zero", exception.getMessage());
assertTimeout
원하는 시간 이내에 수행이 안될 경우 테스트에 사용하면 될듯 하다.
//100 ms동안 기다렸는데 안오면 오류
assertTimeout(
Duration.ofMillis(100),
()->{
Thread.sleep(100); //100 ms동안 기다린다.
}
,"시간초과");
//성공 후 결과값을 받아서 비교
String actualResult = assertTimeout(
Duration.ofMillis(100),
()->{
Thread.sleep(90); //90 밀리세컨더만 쉬었다가
return "aa"; //aa를 리턴
}
,"시간초과");
assertEquals("aa", actualResult); //값이 aa가 안오면 오류
728x90
'프로그래밍 > JUnit' 카테고리의 다른 글
Java JUnit5 with VSCode #1 (0) | 2022.01.22 |
---|