심화 주차 진도 나가기 (~1-7)
security과제 페어프로그래밍
JUnit5
는 가장 인기 있는 단위 테스트 프레임 워크이다.
JUnit Platform + JUnit Jupiter + JUnit Vintage 이 세개가 합친 것이다.
JUnit Platform
- JUnit Platform은 JVM에서 테스트 프레임워크를 실행하는데 기초를 제공한다. 또한 TestEngine API를 제공해 테스트 프레임워크를 개발할 수 있다.
JUnit Jupiter
- JUnit Jupiter는 JUnit 5에서 테스트를 작성하고 확장을 하기 위한 새로운 프로그래밍 모델과 확장 모델의 조합이다.
JUnit Vintage
- JUnit Vintage는 하위 호환성을 위해 JUnit3과 JUnt4를 기반으로 돌아가는 플랫폼에 테스트 엔진을 제공해준다.
@DisplayName
: Test Class 나 Test Method에 사용자 정의 이름 지정@BeforeEach
: 각각의 테스트 메서드 실행 이전에 매번 실행 @AfterEach
: 각각 테스트 메소드 실행 이후에 실행 @BeforeAll
: 현재 클래스의 모든 테스트 메서드 실행 이전에 한 번만 실행@AfterAll
: 현재 클래스의 모든 테스트 메소드 실행 이후에 한번만 실행public class BeforeAfterTest {
@BeforeEach
void setUp() {
System.out.println("각각의 테스트 코드가 실행되기 전에 수행");
}
@AfterEach
void tearDown() {
System.out.println("각각의 테스트 코드가 실행된 후에 수행\n");
}
@BeforeAll
static void beforeAll() {
System.out.println("모든 테스트 코드가 실행되기 전에 최초로 수행\n");
}
@AfterAll
static void afterAll() {
System.out.println("모든 테스트 코드가 실행된 후에 수행");
}
@Test
void test1() {
System.out.println("테스트 코드 작성 1");
}
@Test
void test2() {
System.out.println("테스트 코드 작성 2");
}
}
@assertEquals(x, y)
: x(예상 값)와 y(실제 값)가 같으면 테스트 통과
@assertArrayEquals(a, b)
: 배열 A와 B가 일치함을 확인
@assertFalse(x)
: x가 false 인지 확인
@assertTrue(x)
: x가 true 인지 확인
assertTrue(message, condition)
: condition이 true면 message표시
@assertNull(o)
: 객체o가 null인지 확인
@assertNotNull(o)
: 객체o가 null이 아닌지 확인
@assertSame(ox, oy)
: 객체 ox와 oy가 같은 객체임을 확인, ox와 oy가 같은 객체를 참조하고 있으면 테스트 통과
@assertEquals()
메서드는 두 객체의 값이 같은지 확인하고, assertSame()
메서드는 두 객체의 레퍼런스가 동일한가를 확인 (== 연산자)@assertNotSame(ox, oy)
: ox와 oy가 같은 객체를 참조하고 있지 않으면 통과
@assertfail()
: 테스트를 바로 실패처리
public class AssertionTest {
Calculator calculator;
@BeforeEach
void setUp() {
calculator = new Calculator();
}
@Test
@DisplayName("assertEquals")
void test1() {
Double result = calculator.operate(5, "/", 2);
assertEquals(2.5, result);
}
@Test
@Disabled // 테스트 오류 무시
@DisplayName("assertEquals - Supplier") // 오류 메시지 띄우기
void test1_1() {
Double result = calculator.operate(5, "/", 0);
// 테스트 실패 시 메시지 출력 (new Supplier<String>())
assertEquals(2.5, result, () -> "연산자 혹은 분모가 0이 아닌지 확인해보세요!");
}
@Test
@DisplayName("assertNotEquals")
void test1_2() {
Double result = calculator.operate(5, "/", 0);
assertNotEquals(2.5, result);
}
@Test
@DisplayName("assertTrue 와 assertFalse")
void test2() {
assertTrue(calculator.validateNum(9)); // true면 ok
assertFalse(calculator.validateNum(0)); // false면 ok
}
@Test
@DisplayName("assertNotNull 과 assertNull")
void test3() {
Double result1 = calculator.operate(5, "/", 2);
assertNotNull(result1); // Null이 아니면 ok
Double result2 = calculator.operate(5, "/", 0);
assertNull(result2); // Null이면 ok
}
@Test
@DisplayName("assertThrows")
void test4() { // 예외 예측
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> calculator.operate(5, "?", 2));
assertEquals("잘못된 연산자입니다.", exception.getMessage());
}
}