<aside> ๐Ÿ’ก

test ์ž‘์„ฑ์„ ์œ„ํ•œ 3rd party lib ์ค‘ AssetJ์˜ ์‚ฌ์šฉ๋ฒ•

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-08-25 แ„‹แ…ฉแ„’แ…ฎ 5.37.47.png

</aside>

assertThat

/* ์„ค๋ช…. 1. ๋ฌธ์ž์—ด ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ */
    @Test
    @DisplayName("๋ฌธ์ž์—ด ํ…Œ์ŠคํŠธํ•˜๊ธฐ")
    void testStringValidation(){

        // given
        String expected = "hello world";

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

        // then
        Assertions.assertThat(actual)
                .isNotEmpty() // ๋ฌธ์ž์—ด์ด ๋น„์–ด์žˆ์ง€ ์•Š์€์ง€ " " -> ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๊ณ  ์ธ์ง€
                .isNotBlank() // ๋ฌธ์ž์—ด์ด ๊ณต๋ฐฑ์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ " " -> ์ด๊ฑฐ๋ฅผ ๋น„์–ด์žˆ๋‹ค๊ณ  ์ด์ง€
                .contains("hello")
                .doesNotContain("hahaha")
                .startsWith("h")
                .endsWith("d")
                .isEqualTo(expected);

    }
 /* ์„ค๋ช…. 2. ์ˆซ์ž ํ…Œ์ŠคํŠธํ•˜๊ธฐ */
    @Test
    @DisplayName("์ˆซ์ž ํ…Œ์ŠคํŠธํ•˜๊ธฐ")
    void testIntegerValidation(){
        double pi = Math.PI;

        Double actual = pi;

        Assertions.assertThat(actual)
                .isPositive()
                .isGreaterThan(3)
                .isLessThan(4)
                .isEqualTo(Math.PI);
    }

  /* ์„ค๋ช…. 3. ๋‚ ์งœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ */
    @Test
    @DisplayName("๋‚ ์งœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ")
    void testLoclDateTimeValidation(){
        String birthday = "2014-09-18T16:42;00.000";

        LocalDateTime theDay = LocalDateTime.parse(birthday);

        Assertions.assertThat(theDay)
                .hasYear(2014)
                .hasMonthValue(9)
                .hasMonth(Month.SEPTEMBER)
                .hasDayOfMonth(10)
                .isBetween("2014-01-01T0:00;00.000","2014-12-31T23:59;59.000")
                .isBefore(LocalDateTime.now());

    }
 /* ์„ค๋ช…. 4. ์˜ˆ์™ธ ํ…Œ์ŠคํŠธํ•˜๊ธฐ */
    @Test
    @DisplayName("์˜ˆ์™ธ ํ…Œ์ŠคํŠธํ•˜๊ธฐ")
    void testExceptionValidation(){

        /* ์„ค๋ช…. ์˜ˆ์ œ๋ฅผ ์œ„ํ•ด Throwable ํƒ€์ž…์„ ์›ํ•˜๋Š” ์‹œ์ ์— ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜๋„ ์žˆ๊ธดํ•˜๋‹ค. */
        Throwable thrown = AssertionsForClassTypes.catchThrowable(() -> {
            throw new IllegalArgumentException("์ž˜๋ชป๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์…จ์Šต๋‹ˆ๋‹ค");
        });

        int firstNum = 10;
        int secondNum = 0;
        NumberValidator numberValidator = new NumberValidator();
        Exception exception = org.junit.jupiter.api.Assertions.assertThrows(
                Exception.class,
                () -> numberValidator.checkDividableNumbers(firstNum, secondNum)
        );

//        Assertions.assertThat(thrown)
        Assertions.assertThat(exception)
                .isInstanceOf(IllegalArgumentException.class)
//                .hasMessageContaining("ํŒŒ๋ฆฌ๋ฏธํ„ฐ");
                .hasMessageContaining("1์œผ๋กœ");

    }
 /* ์„ค๋ช…. 5. filter๋ฅผ ์ด์šฉํ•œ ๋‹จ์ •๋ฌธ ํ…Œ์ŠคํŠธํ•˜๊ธฐ */

    @Test
    @DisplayName("filtering assertions ํ…Œ์ŠคํŠธํ•˜๊ธฐ")
    void testFilteringAssertions(){
        Member member1 = new Member(1, "user01", "ํ™๊ธธ๋™", 20);
        Member member2 = new Member(2, "user02", "์œ ๊ด€์ˆœ", 16);
        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);

        /* ์„ค๋ช…. ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ stream ๋ฌธ๋ฒ•์ฒ˜๋Ÿผ filtering์„ ๊ฒ…์–ด์„œ ๋‹จ์ •๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. */
//        Assertions.assertThat(members)
//                .filteredOn(member -> member.getAge() > 20)
//                .containsOnly(member3, member4);

        Assertions.assertThat(members)
                .filteredOn("age", 20)
                .containsOnly(member1);
    }
package com.haenin.assertions.section02.assertj;

public class Member {
    private int sequence;
    private String id;
    private String name;
    private int age;

    public Member() {
    }

    public Member(int sequence, String id, String name, int age) {
        this.sequence = sequence;
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getSequence() {
        return sequence;
    }

    public void setSequence(int sequence) {
        this.sequence = sequence;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}