Fixture 및 Factory 활용 방법 - depromeet/Took-BE GitHub Wiki

Fixture 활용 방법

역할

엔티티 생성 및 데이터베이스에 저장

활용예시

상황예시 : given절에서 엔티티를 생성해 DB에 저장하고 싶다.

// 기본값으로 생성
cardFixture.create();

// 커스텀 필요
cardFixture.creator()
  .user(user)
  .nickname("임손나")
  .create();

필수로 입력되어야 할 외래키의 경우 직접 given 절에서 삽입하도록 구현하였습니다.

image

Factory 활용 방법

역할

엔티티 생성

활용예시

상황예시: 데이터베이스에 대한 의존성 없이 given절에서 엔티티 생성하고 싶다.

// 기본값으로 생성
cardFactory.create();

// 커스텀 필요
cardFactory.creator()
  .nickname("임손나")
  .create();

설계 방식

Fixture와 Factory의 차이는 오직 DB에 대한 의존성입니다.

상속 없이 단일 클래스로 구현했을 때, 동일한 코드가 두 곳에 존재합니다. 즉, 필드 추가와 같은 수정 사항이 발생했을 때 관리 포인트가 2배가 됩니다. 혹은 한 곳은 수정하고 한 곳은 수정하지 못하는 등 휴먼 에러가 발생할 수 있습니다. 따라서 앞으로의 유지보수를 위해 Base 클래스를 두도록 하였습니다.

                 ┌──────────────────┐
                 │     XXXBase      │
                 └────────▲─────────┘
                          │
      ┌───────────────────┴───────────────────┐
      │                                       │
┌──────────────┐                     ┌──────────────┐
│  XXXFixture  │                     │  XXXFactory  │
└──────────────┘                     └──────────────┘