ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 21강. 스프링 통합 테스트
    스프링 프레임워크-입문 2021. 5. 6. 10:48

    스프링 컨테이너와 DB까지 연결한 통합 테스트를 진행해보겠습니다.

    MemberServiceIntegrationTest 클래스를 생성하도록 합니다. MemberServiceTest를 돌릴 때 DB까지 동작하게 함으로서 MemberServiceTest 코드처럼 순수 자바 코드가 아니고 SpringBoot가 들고 있는 DB에 관한 코드까지 사용해보겠습니다.

     

    코드의 내용은 MemberServiceTest와 동일합니다.

     

    Spring이 테스트하기 위해서 위의 2가지 어노테이션을 추가해줍니다.

     

    그 후 @BeforeEach에 해당되는 구문을 삭제하겠습니다. 우리는 스프링 컨테이너로부터 DI를 받아 진행할 것입니다.

    생성자를 통한 DI가 가장 좋은 것이지만 Test 코드는 개발의 끝단이기에 편한 방식인 @Autowired를 이용해서 DI를 해주도록 하겠습니다.

     

    위의 코드에서 에러가 나는 이유는 SpringConfig에서 JdbcMemoryRepository롤 변경을 했기 때문입니다. 그렇기에 우리는 코드를 아래로 수정합니다.

    @AfterEach 어노테이션이 붙은 구문도 따라서 삭제해줍니다.

    (다음 테스트를 진행할 때 메모리를 비우기 위해서입니다. 하지만 이제는 필요가 없습니다. 왜냐하면 @Transactional이 있기 때문입니다. 이 설명은 후에 하겠습니다.)

     

    @Transactional 어노테이션도 삭제합니다.

     

    정상적으로 회원가입 코드가 실행되었습니다.

    *여기서 중복된 회원일 경우 DB에 저장할 때 값이 중복된 경우일 수 있습니다. 값을 변경해주면 됩니다.

    ID단에서 에러가 발생한 것이지만 정상적으로 동작이 가능해졌습니다.

    한 번 더 동작시키면 회원가입()에서 에러를 토해냅니다.

     

    에러가 나는 이유는 DB에 값이 누적됬기 때문입니다. 우리가 배웠던 방식으로는 @BeforEach @AfterEach 등을 이용해서 DB를 비워내는 것을 해야하나 @Transactional을 사용하면 해결할 수 있습니다

     

    DB는 SQL 구문을 입력한 후 무조건 commit을 해주어야합니다. 보통 auto-commit 모드로 돌아가게 되는데 무튼 DB는 트랜잭션이라는 개념이 있어서 commit을 하지 않으면 DB에 적용이 되지 않습니다. @Transactinal이 DB에 적용하지 않고 롤백을 해버리는 것입니다.

    다시 추가해보도록 합니다.

    DB를 비우도록 하겠습니다.

    정상적으로 동작했습니다. 만약 DB에 commit이 되었다면 조회를 했을 때 값이 있어야할 것입니다. 확인해보겠습니다.

    값이 반영되지 않았습니다.

    전체 동작을 해도 정상적으로 수행이 되는 것을 알 수 있습니다.

     

    아까 말했던 순수한 자바 테스트는 단위 테스트라고 합니다. 필요 없느냐라고 볼 수 도 있지만 단위 테스트가 더 좋은 테스트일 확률이 높습니다.

     

    '스프링 프레임워크-입문' 카테고리의 다른 글

    23강. JPA  (0) 2021.05.06
    22강. 스프링 Jdbc Template  (0) 2021.05.06
    20강. 순수 JDBC  (0) 2021.05.06
    19강. H2 데이터베이스 설치  (0) 2021.05.05
    18강. 회원 웹 기능 - 조회  (0) 2021.05.05
Designed by Tistory.