어제 오늘 내일

[JUnit] assertAll을 활용한 DTO/엔티티 필드 일괄 검증 본문

IT/JUnit

[JUnit] assertAll을 활용한 DTO/엔티티 필드 일괄 검증

hi.anna 2026. 1. 7. 08:03

1. assertAll은 무엇인가?

assertAll()은 JUnit 5에서 여러 개의 검증(assert)을 한 번에 묶어 실행할 수 있도록 제공되는 메소드입니다.
DTO나 엔티티처럼 필드가 여러 개인 객체를 테스트할 때, 각각 검증 코드를 따로 작성하는 대신 묶어서 한 번에 확인할 수 있습니다.

대표적인 형태는 다음과 같습니다.

assertAll(Executable... executables);
assertAll(String heading, Executable... executables);
  • heading: 검증 그룹 설명
  • executables: 람다식 형태로 작성한 여러 개의 검증 코드

 

2. DTO 필드를 assertAll로 간단하게 일괄 검증하기

class MemberDto {
    private String name;
    private int age;
    private String email;

    public MemberDto(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
    public String getEmail() { return email; }
}

@Test
void dto_필드_검증() {
    MemberDto dto = new MemberDto("홍길동", 30, "hong@example.com");

    assertAll(
        () -> assertEquals("홍길동", dto.getName()),
        () -> assertEquals(30, dto.getAge()),
        () -> assertEquals("hong@example.com", dto.getEmail())
    );
}

설명

  • 이름, 나이, 이메일 검증을 한 블록에 모아 가독성이 좋아집니다.
  • 하나가 실패하더라도 나머지 검증을 모두 실행한 후 결과를 보여줍니다.

 

3. 엔티티 필드 + 상태 메소드 함께 검증하기

class Order {
    private Long id;
    private String status;
    private int amount;

    public Order(Long id, String status, int amount) {
        this.id = id;
        this.status = status;
        this.amount = amount;
    }

    public Long getId() { return id; }
    public String getStatus() { return status; }
    public int getAmount() { return amount; }
    public boolean isCompleted() { return "COMPLETED".equals(status); }
}

@Test
void 엔티티_검증() {
    Order order = new Order(1L, "COMPLETED", 5000);

    assertAll(
        () -> assertEquals(1L, order.getId()),
        () -> assertEquals("COMPLETED", order.getStatus()),
        () -> assertEquals(5000, order.getAmount()),
        () -> assertTrue(order.isCompleted())
    );
}

설명

  • 필드 값 검증과 상태 메소드 검증을 한 번에 처리할 수 있습니다.

 

4. 필수 값·기본 값 검증도 깔끔하게 처리하기

class Product {
    private String name;
    private int price;
    private boolean onSale = false;

    public Product(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() { return name; }
    public int getPrice() { return price; }
    public boolean isOnSale() { return onSale; }
}

@Test
void 기본값_검증() {
    Product p = new Product("노트북", 1000000);

    assertAll(
        () -> assertNotNull(p.getName()),
        () -> assertTrue(p.getPrice() > 0),
        () -> assertFalse(p.isOnSale())
    );
}

 

 

5. assertAll 사용 시 간단 팁

  • 관련된 검증을 묶어 가독성을 높일 때 가장 효과적입니다.
  • 필드가 많다면 그룹을 나눠 여러 assertAll을 사용하는 방식도 좋습니다.
  • 실패해야 하는 부분을 명확히 확인할 때에도 유용합니다.

 

 

반응형
Comments