본문 바로가기

✅ 테스트9

Testcontainers에서 MySQL 사용해보기 (테스트 환경에서 자동으로 MySQL 컨테이너 띄우고 내리기) 이 글은 이전 글 Testcontainers 사용하기까지 에서 이어졌습니다. 잘못된 내용이나 의견 있다면 편하게 말씀해주세요 🙏🏻 Testcontainers 간단 소개 Testcontainers 라이브러리는 도커 컨테이너를 자바 코드로 조작할 수 있다. 다시 말해 자바 코드로 특정 도커 이미지를 실행하고 끌 수 있다. 일반 도커 컨테이너와 마찬가지로 네트워크 통신, 스토리지 조작, 환경변수 설정을 할 수 있다. 이를 DB 테스트 환경에 도입하면 다음과 같다. 인메모리 DB로 테스트하는 것이 아닌 실제 운영 DB와 동일한 환경을 외부 인스턴스에 띄우지 않고 로컬 도커 컨테이너에서 테스트할 때마다 DB 컨테이너를 띄우고 테스트가 끝나면 컨테이너를 내리는 작업을 자동화할 수 있다. CI 환경에 도커만 설치되어.. 2022. 6. 23.
[의사결정] Testcontainers 사용하기까지 잘못된 내용이나 의견 있다면 편하게 말씀해주세요 🙏🏻 사건의 개요 Spring 프로젝트를 했다. DB와 관련된 통합 테스트 작성하였고 모두 통과하였다. 실제 운영 DB 설정을 위해, 테스트 코드에서 작성한 더미 데이터 스크립트(. sql)를 사용하지 못해 재작성하였다. 사건의 원인 테스트 DB 환경 : 인메모리(H2) DB 실제 운영 DB 환경 : MySQL 8.0 테스트와 배포 DB 환경이 달랐다. JPA가 제공해주는 Dialet(방언) 기능을 사용하면 두 DB 간 문제가 없었지만, 방언 기능을 사용하지 않는 퓨어 .sql 스크립트에서 문제가 발생했다. (더미 데이터 .sql 스크립트 재사용 못함) 방언 기능을 사용하지 않는 SQL은 없었지만 만약 있었다고 한다면 문제가 발생할 수 있다.(사실 몇 문제.. 2022. 6. 21.
JUnit5에서 검증문이 중간에 실패해도 멈추지 않고 검증문 모두 실행하기(AssertAll, AssertJ, SoftAssertions) 상황 - JUnit5에서 하나의 테스트 코드에 N개의 검증문이 있다. - 검증문 수행 중에 앞의 검증문이 실패하면 실패한 이후의 검증문은 실행되지 않는다. 해결 하나의 검증문이 실패해도 멈추지 않고 모든 성공/실패 내역을 확인하는 방법은 아래와 같다. 방법 1. Junit5의 assertAll() + JUnit5 검증문 // https://blog.codeleak.pl/2017/11/junit-5-meets-assertj.html import static org.junit.jupiter.api.Assertions.assertAll; List owners = Arrays.asList("Betty Davis", "Eduardo Rodriquez"); // assert assertAll( () -> asser.. 2022. 6. 2.
단위 테스트란 무엇일까? 런던파와 고전파의 차이점 🆚 이 글은 책 Unit Testing(단위 테스트) 2장과 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 목차 - 런던파? 고전파? - 단위 테스트 정의 - 런던파의 테스트 격리 - 고전파의 테스트 격리 - 런던파와 고전파의 장단점과 차이 - 통합 테스트 - 개인적 결론 런던파? 고전파? 단위 테스트(Unit Test)는 무엇일까? 단위 테스트는 두 가지 견해 고전파(classical school)와 런던파(London school)로 구분할 수 있다. 고전파는 켄트 백의 테스트 주도 개발(TDD)으로 원론적으로 접근하는 방식 때문에 '고전'이라고 한다. 런던파는 런던 프로그래밍 커뮤니티에서 시작됐다. 목 추종자(mockist)라고도 불린다. 두 분파는 어떤 차이로 단.. 2022. 3. 19.
IntelliJ의 Code&Live Templates 활용하여 생산성 높이기! 테스트코드 작성시간 줄이고 아직 구현하지 않은 메서드 예외로 확인하기 Live Template Live Templates Live Templates는 영상에서 보듯이 public static void main 나 System.out.println() 등 자주 반복되는 코드를 단축어(psvm, sout 등)로 사용할 수 있는 유용한 기능이다. (이미 많은 분들이 알고 있지만) BDD, DCI 패턴의 계층형 테스트 + Live Templates 기계인간 이종립님 Junit5로 계층 구조의 테스트 코드 작성하기의 글을 보고 테스트코드에 DCI 패턴을 적용하고 있지만 코드길이가 상당해 불편했지만 Live Templates를 추가하여 약 10초 정도의 시간을 줄일 수 있다. (테스트 1000개 짜면 10000초 정도를 줄일 수 있다.. 하지만 설정하고 글쓰는데 1시간 걸렸다 누군가.. 2022. 3. 10.