AssertJ

AssertJ๋Š” ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

  • ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ(๊ฐ€๋…์„ฑ์ด ์ข‹์Œ)

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉด์„œ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต

์˜์กด์„ฑ

image-20211226210215502

spring-boot-starter-test์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด์žˆ๋‹ค. spring-boot-starter-test๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

Gradle

testCompile 'org.assertj:assertj-core:3.21.0'

Maven

<dependency>
  <groupId>org.assertj</groupId>
  <artifactId>assertj-core</artifactId>
  <version>3.21.0</version>
  <scope>test</scope>
</dependency>

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์ž‘ํ•˜๊ธฐ

Assertions.assertThat()

๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” assertThat() ๋ฉ”์„œ๋“œ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

assertThat(ํ…Œ์ŠคํŠธ ํƒ€๊ฒŸ)
    .method1()
    .method2()
    .method3();

ํ…Œ์ŠคํŠธ ์‹คํŒจ ๋ฉ”์„ธ์ง€

  • ํ…Œ์ŠคํŠธ ์‹คํŒจ์‹œ ๋‚˜ํƒ€๋‚ผ ๋ฉ”์„ธ์ง€๋ฅผ .as()๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ˜๋“œ์‹œ ๊ฒ€์ฆ ๋ฌธ ์•ž์— ์ž‘์„ฑ๋˜์–ด์•ผํ•œ๋‹ค.

    @Test
    void asExample() {
        String blank = " ";
        assertThat(StringUtils.hasText(blank))
                .as("check '%s' is null", blank)
                .isTrue();
    }

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋‘๋ฉด ํ…Œ์ŠคํŠธ ์‹คํŒจ์‹œ ์ฝ˜์†”์ฐฝ์— ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค.

[check ' ' is null] 
Expecting value to be true but was false
org.opentest4j.AssertionFailedError: [check ' ' is null] 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒ€์ฆ๋ฌธ ๋’ค์— ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    @Test
    void asExample() {
        String blank = " ";
        assertThat(StringUtils.hasText(blank))
                .isTrue()
                .as("check '%s' is null", blank);
    }
Expecting value to be true but was false
org.opentest4j.AssertionFailedError: 
Expecting value to be true but was false

Collection ํ•„ํ„ฐ๋ง

.filteredOn()

.filteredOn()์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ๋ฐ์ดํ„ฐ๋“ค์„ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

    @Test
    void test() {
        EnumSet<DayOfWeek> days = EnumSet.allOf(DayOfWeek.class);
        assertThat(days)
                .filteredOn(d -> d.getValue() > 4)
                .containsOnly(DayOfWeek.FRIDAY, DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);
    }

์ด๋•Œ not, in, notIn์— ๋Œ€ํ•œ ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.

        List<Human> list = new ArrayList<>();
        list.add(new Human("faker", 26));
        list.add(new Human("bang", 26));
        list.add(new Human("wolf", 26));
        list.add(new Human("keria", 20));

        assertThat(list)
                .filteredOn("age", not(26))
                .containsOnly(list.get(3));

Collection Data Extracting

๊ธฐ์กด์˜ ํด๋ž˜์Šค์˜ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ–ˆ๋‹ค.

@Test
void no_extracting() throws Exception{
    List<String> names = new ArrayList<>();
    for (T1 member : members) {
        names.add(member.getName());
    }

    assertThat(names).containsOnly("faker", "bang", "wolf", "keria");
}

ํ•˜์ง€๋งŒ assertj์—์„œ extracting์„ ์ง€์›ํ•ด์ฃผ๋ฉด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•ด ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

    @Test
    void extracting() {
        List<T1> members = new ArrayList<>();
        members.add(new T1("faker", 26));
        members.add(new T1("bang", 26));
        members.add(new T1("wolf", 26));
        members.add(new T1("keria", 20));

        assertThat(members)
                .extracting("name")
                .contains("faker", "bang", "wolf", "keria");


        assertThat(members)
                .extracting("name", "age")
                .contains(tuple("faker", 26),
                        tuple("bang", 26),
                        tuple("wolf", 26),
                        tuple("keria", 20));
    }

์ถ”์ถœํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ๊ฐœ๋ผ๋ฉด ํƒ€์ž… ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” assertj์—์„œ ์ง€์›ํ•ด์ฃผ๋Š” tuple()๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

SoftAssertions

Assertions.assertThat()์€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•œ๊ฐœ๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋Š” ์ค‘์ง€๋œ๋‹ค.

SoftAssertions์„ ์ด์šฉํ•˜๋ฉด ๋ชจ๋“  assertThat์„ ์‹คํ–‰ํ•˜๊ณ  ํ•ด๋‹น ์‹คํŒจ ๋‚ด์—ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    @Test
    void test() {
        String str = "test";
        SoftAssertions.assertSoftly(softAssertions -> {
            softAssertions.assertThat(StringUtils.hasText(str))
                    .as("check '%s' is not null", str)
                    .isFalse();

            softAssertions.assertThat(StringUtils.hasLength(str))
                    .as("check '%s' is not null", str)
                    .isTrue();
        });
    }
Multiple Failures (1 failure)
-- failure 1 --
[check 'test' is not null] 
Expecting value to be false but was true
at SoftAssertionTest.lambda$test$0(SoftAssertionTest.java:15)
org.assertj.core.error.AssertJMultipleFailuresError: 
Multiple Failures (1 failure)
-- failure 1 --

์ฐธ๊ณ 

Last updated

Was this helpful?