230712_ JUnit 5(1)

hoy_·2023년 7월 12일
0

Today, I Learned

목록 보기
29/36

1. 오늘의 일정

  1. 심화 주차 진도 나가기 (~1-7)

  2. security과제 페어프로그래밍




2. 배운 내용

예제코드 모음 github 바로가기


JUnit5 활용하기

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를 기반으로 돌아가는 플랫폼에 테스트 엔진을 제공해준다.

주요 Annotations과 실행 예제

  • @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());
	}
}



profile
배우는 사람

0개의 댓글