[TIL] 2024-08-02

성장일기·2024년 8월 2일

회고

목록 보기
19/37
post-thumbnail

중요 학습 내용 [JDBC]

TEST

  • 테스트는 기본적으로 1. given, 2. when, 3. then의 개념으로 진행
  • 단위 테스트: layered architecture에서 각 계층마다 단위 메소드를 테스트
  • 통합 테스트: layer 단위가 아닌 전체 기능 동작에 대해 테스트
  • 테스트 케이스: 테스트 대상이 되는 기능을 시나리오 별로 테스트
  • Junit 프레임워크로 Assertions를 통해 여러 메서드를 호출하여 테스트를 할 수 있다.
  • 메소드 종류
    • assertEquals()
    • assertNull()
    • assertNotNull()
    • assertAll()
    • assertThrows()
    • assertInstanceOf()
    • etc
  • 메소드 체이닝 방식
    // given
    String expected = "hello world";

    // when
    String actual = new String(expected);

    // then
    Assertions.assertThat(actual)
            .isNotEmpty()
            .isNotBlank()
            .contains("hello")
            .doesNotContain("hahah")
            .startsWith("h")
            .endsWith("d")
            .isEqualTo("hello world");

    double pi = Math.PI;

    Double actual = Double.valueOf(pi);

    Assertions.assertThat(actual)
            .isPositive()
            .isGreaterThan(3)
            .isLessThan(4)
            .isEqualTo(Math.PI);
    String birthday = "2014-09-18T16:42:00.000";

    LocalDateTime theDay = LocalDateTime.parse(birthday);
    System.out.println("theDay: " + theDay.toString());

    Assertions.assertThat(theDay)
            .hasYear(2014)
            .hasMonthValue(9)
            .hasMonth(Month.SEPTEMBER)
            .hasDayOfMonth(19)
            .isBetween("2014-01-11T00:00:00.000", "2014-12-31T23:59:59.999")
            .isBefore(LocalDateTime.now());
    Throwable thrown = AssertionsForClassTypes.catchThrowable(
            () -> {
            throw new IllegalArgumentException("wrong parameters entered");
            }
    );

    Assertions.assertThat(thrown)
            .isInstanceOf(IllegalArgumentException.class)
            .hasMessageContaining("parameter");

    Member member1 = new Member(1, "user01", "유관순", 16);
    Member member2 = new Member(2, "user02", "홍길동", 20);
    Member member3 = new Member(3, "user03", "이순신", 40);
    Member member4 = new Member(4, "user04", "임꺽정", 43);
    Member member5 = new Member(5, "user05", "심사임당", 19);

    List<Member> members = Arrays.asList(
            member1,
            member2,
            member3,
            member4,
            member5
        );

    Assertions.assertThat(members)
            .filteredOn(member -> member.getAge() > 20)
            .containsOnly(member3, member4);

    Member member1 = new Member(1, "user01", "유관순", 16);
    Member member2 = new Member(2, "user02", "홍길동", 20);
    Member member3 = new Member(3, "user03", "이순신", 40);
    Member member4 = new Member(4, "user04", "임꺽정", 43);
    Member member5 = new Member(5, "user05", "심사임당", 19);

    List<Member> members = Arrays.asList(
            member1,
            member2,
            member3,
            member4,
            member5
    );

    Assertions.assertThat(members)
            .filteredOn("age", 20)
            .containsOnly(member2);

Lifecycle Annotation

@BeforeAll
public static void beforeAll() {
    System.out.println("Before All");
}

// 단위 테스트마다 실행
@BeforeEach
public void beforeEach() {
    System.out.println("Before Each");
}

// 단위 테스트 단위
@Test
public void test1() {
    System.out.println("Test1");
}

@Test
public void test2() {
    System.out.println("Test2");
}

@AfterEach
// 단위 테스트마다 실행
public void afterEach() {
    System.out.println("After Each");
}

@AfterAll
public static void AfterAll() {
    System.out.println("After All");
}

Additional Annotation

// 단위 테스트 단위
@Disabled
@Test
public void testIgnore() {
    System.out.println("skipped test");
}

@Test
@Timeout(value = 1000, unit = TimeUnit.MILLISECONDS)
public void testTimeout() throws InterruptedException{
    Thread.sleep(900);      // pass
//        Thread.sleep(1100);     // failed
    System.out.println("timeout test");


@Test
@Order(1)           // 작을수록 우선순위가 높다(먼저 실행)
public void testFirst() {
    System.out.println("first test");
}

@Test
@Order(3)
public void testThird() {
    System.out.println("third test");
}

@Test
@Order(2)
public void testSecond() {
    System.out.println("second test");
}

@RepeatedTest(10)
public void testRepeat() {
    System.out.println("repeated test");
}

@ParameterizedTest

  • 테스트케이스를 줄일 수 있다.
  • @ValueSource()를 통해 given 설정
    @DisplayName("홀수 짝수 판별 테스트")
    @ParameterizedTest
    @ValueSource(ints = {1, 3, -1, 15, 1233})
    void testIsOdd (int number) {

        // when
        boolean result = NumberValidator.isOdd(number);
        // then
        Assertions.assertTrue(result);
profile
엔지니어로의 성장일지

0개의 댓글