Test Patterns for Standard Fixtures Reuse

AAA(Arrange, Act, Assert) 패턴을 사용할때 일반적으로 Arrange 단계가 가장 크다.

Arrange 단계에서 standard fixtures 를 반환하는 factory 를 갖는 것이 재사용성 측면에서 좋다. 이때 도움되는 두 가지 패턴으로는 Object Mother 과, Test Data Builder 패턴이 있다. 또한 관련 라이브러리로는 라이브러리로는 Fixture MonkeyEasyRandom 이 대표적이다.

Fixture Money 의 탄생 배경 중 하나는 E-Commerce Domain 의 문제점을 해결하기 위함도 있다고 한다.

E-Commerce Domain Problems:

  • 객체가 가지고 있는 데이터 항목이 많아 객체 생성 비용이 크다.
  • 타 서비스와 연동이 많다.
  • 데이터간 정합성이 중요하다.

Fixture Monkey Examples:

@Value
public static class DeliveryAddress {
    String baseAddress;
    
    @Nullable
    String zipCode;
    
    boolean road;
    
    String telNo1;
    
    @Nullable
    String telNo2;
}
// given
FixtureMonkey sut = FixtureMonkey.create();

// when
DeliveryAddress deliveryAddress = sut.giveMeBuilder(DeliveryAddress.class)
        .set("road", true)
        .sample();

// then
thenNoException()
    .isThrownBy(() -> DeliveryAddressValidator.validateRoadAddress(deliveryAddress));

References