[워밍업 클럽] BE 클린코드&테스트 4주차 발자국

강의 요약

Persistence Layer

  • Data Access의 역할

  • 비지니스 가공 로직이 포함되어서는 안된다.

  • Data에 대한 CRUD에만 집중한 레이어

     

DataJpaTest

  • Jpa 관련된 Bean만 로딩한다.

  • 상대적으로 빠름

  • 기본적으로 @Transactional이 달려있다. → 자동으로 롤백

SpringBootTest

  • 모든 Bean을 로딩한다.

  • 상대적으로 느림

WebMvcTest

  • Controller 관련 Bean만 로딩한다.

  • 상대적으로 빠름 </aside>

Business Layer

  • 비지니스 로직을 구현하는 역할

  • Persistence Layer와의 상호작용(Data를 읽고 쓰는 행위)을 통해 비지니스 로직을 전개시킨다.

  • 트랜잭션을 보장해야한다.

Presentation Layer

  • 외부 세계의 요청을 가장 먼저 받는 계층

  • 파라미터에 대한 최소한의 검증을 수행한다.

Test Double

https://martinfowler.com/articles/mocksArentStubs.html

  • Dummy

    • 아무것도 하지 않는 깡통 객체

  • Fake

    • 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체

    • ex) FakeRepository

  • Stub

    • 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체

    • 그 외에는 응답하지 않는다.

    • 상태 검증

  • Spy

    • Stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체

    • 일부는 실제 객체처럼 동작시키고 일부만 Stubbing할 수 있다.

  • Mock

    • 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체

    • 행위 검증

       

 

미션 회고

3개의 테스트코드에서 중복된 내용을 @BeforeEach 로 합치는 미션.

단순히 중복을 없애는 것이 아니라, 각각의 테스트가 의미를 가지도록 묶어야 하는 미션이었습니다.

이 미션을 통해 Fixture를 생성할 때 Fixture의 생성에 초점이 맞춰지는 것이 아닌 테스트에 초점을 맞춰 문서의 기능을 할 수 있도록 해야한다는 것을 알았습니다.

@BeforeEach 
void setUp() {
    1-1. 2-1. 3-1. 사용자 생성에 필요한 내용 준비
    1-2. 2-2. 3-2. 사용자 생성
    1-3. 2-3. 3-5. 게시물 생성에 필요한 내용 준비
    1-4. 2-4. 3-6. 게시물 생성
} 

@DisplayName(""사용자가 댓글을 작성할 수 있다."")
@Test
void writeComment() {

    // given
    1-5. 댓글 생성에 필요한 내용 준비

    // when
    1-6. 댓글 생성

    // then
    검증
}

@DisplayName(""사용자가 댓글을 수정할 수 있다."")
@Test
void updateComment() {

    // given
    2-5. 댓글 생성에 필요한 내용 준비
    2-6. 댓글 생성

    // when
    2-7. 댓글 수정

    // then
    검증
}

@DisplayName(""자신이 작성한 댓글이 아니면 수정할 수 없다."")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {

    // given
    3-3. 사용자2 생성에 필요한 내용 준비
    3-4. 사용자2 생성

    3-7. 사용자1의 댓글 생성에 필요한 내용 준비
    3-8. 사용자1의 댓글 생성

    // when
    3-9. 사용자2가 사용자1의 댓글 수정 시도

    // then
    검증        
}

 

느낀점

실무에서 테스트코드를 짤 때 했던 고민들이 많이 해소되어서 좋았습니다.

특히 어떤 테스트코드가 좋은지, 어떻게 작성하여야 문서로서의 기능을 할 수 있을지 알 수 있는 시간이었습니다.

 

댓글을 작성해보세요.

채널톡 아이콘