Fixture 및 Factory 활용 방법 - depromeet/Took-BE GitHub Wiki
Fixture 활용 방법
역할
엔티티 생성 및 데이터베이스에 저장
활용예시
상황예시 : given절에서 엔티티를 생성해 DB에 저장하고 싶다.
// 기본값으로 생성
cardFixture.create();
// 커스텀 필요
cardFixture.creator()
.user(user)
.nickname("임손나")
.create();
필수로 입력되어야 할 외래키의 경우 직접 given 절에서 삽입하도록 구현하였습니다.
Factory 활용 방법
역할
엔티티 생성
활용예시
상황예시:
데이터베이스에 대한 의존성 없이
given절에서 엔티티 생성하고 싶다.
// 기본값으로 생성
cardFactory.create();
// 커스텀 필요
cardFactory.creator()
.nickname("임손나")
.create();
설계 방식
Fixture와 Factory의 차이는 오직 DB에 대한 의존성입니다.
상속 없이 단일 클래스로 구현했을 때, 동일한 코드가 두 곳에 존재합니다. 즉, 필드 추가와 같은 수정 사항이 발생했을 때 관리 포인트가 2배가 됩니다. 혹은 한 곳은 수정하고 한 곳은 수정하지 못하는 등 휴먼 에러가 발생할 수 있습니다. 따라서 앞으로의 유지보수를 위해 Base 클래스를 두도록 하였습니다.
┌──────────────────┐
│ XXXBase │
└────────▲─────────┘
│
┌───────────────────┴───────────────────┐
│ │
┌──────────────┐ ┌──────────────┐
│ XXXFixture │ │ XXXFactory │
└──────────────┘ └──────────────┘