▲neo 9달전 | parent | favorite | on: GN⁺: Testcontainers - 실제 의존성을 가진 단위 테스트(testcontainers.com)Hacker News 의견 첫 번째 댓글 요약: Testcontainers에 대한 극찬을 예상치 못했음. Docker를 사용하지 않던 환경에서 오면 매력적으로 보일 수 있음. 많은 사용 사례에서 유용하지만, 다른 컨테이너화된 워크플로우와 잘 작동하게 만들기는 어려움. Testcontainers는 Docker CLI에 대한 커스텀 쉘 호출을 핵심 기능으로 사용하는 라이브러리로, 다른 컨테이너화된 워크플로우를 도입할 때 문제와 복잡성을 야기함. 호스트 머신에서만 실행되고 다른 Docker 관련 작업이 없다고 가정하는 경향이 있어, 종종 비 Docker 환경의 라이브러리보다 나쁘거나 더 나쁠 수 있음. 두 번째 댓글 요약: Testcontainers는 통합 테스트에 있어 게임 체인저임. 언어별 Docker API를 제공하여 컨테이너를 쉽게 구동하고 연결 준비 상태를 확인할 수 있음. 모든 새 프로젝트에 통합 테스트를 위해 Testcontainers를 사용함. CI 설정은 Linting, 빌드, 유닛 테스트, 그리고 Testcontainers를 사용한 통합 테스트를 포함함. 언어 바인딩은 데이터베이스 작업에 유용한 헬퍼 함수를 제공함. 세 번째 댓글 요약: Docker-compose.yml을 사용하는 것이 더 나은지 이해하지 못함. 필요한 컨테이너 간 복잡한 의존성이 있을 때 Testcontainers는 비교적 약함. 5년 전에 사용해본 경험이 있지만, 지금은 상황이 크게 나아졌을 수도 있음. 네 번째 댓글 요약: 실제 데이터베이스/엘라스틱서치/레디스/바니시 등을 사용하는 통합 테스트를 매우 가치 있게 여김. Testcontainers는 테스트 스위트 동안 새로운 엘라스틱서치 인덱스를 생성하고 종료하는 등의 작업을 대신해줌. 애플리케이션 기능을 가능한 한 많이 종단 간 통합 스타일 테스트로 커버하는 전략을 선호함. 명확한 입력/출력 쌍이 있는 코드 부분에만 유닛 테스트를 사용하고, 제어할 수 없는 외부 API 호출 등에는 모의 객체(mock)를 사용함. 다섯 번째 댓글 요약: 약 7년 전에 Go 언어용 Testcontainers인 conex를 작성함. Go의 공식 테스트 프레임워크와 일급 통합을 제공함. 여섯 번째 댓글 요약: 각 테스트마다 새롭고 깨끗한 브라우저 인스턴스를 제공하는 것이 느리다는 의견이 있음. 이미 컨테이너 세계에 투자했다면 몇 가지 추가적인 컨테이너를 받아들이는 것이 좋음. 그렇지 않은 경우 추가적인 복잡성이나 부피에 대한 이점이 별로 없음. 일곱 번째 댓글 요약: Testcontainers를 살펴보고 자체 버전을 만듦. Docker는 누수가 많은 추상화로, 다양한 환경에서 테스트를 실행해야 함. Mac, Linux VM, Linux VM의 Docker 컨테이너 내에서 Docker 소켓을 마운트한 상태 등에서 네트워킹이 완전히 다름. 병렬로 테스트를 실행하고 각 테스트에 맞는 로그를 출력하고자 함. Testcontainers가 이러한 문제를 해결했는지 확실하지 않지만, 세부 사항에 악마가 있다는 것을 알게 됨. 여덟 번째 댓글 요약: 로컬 테스트 환경을 docker-compose로 생성함. Testcontainers는 Docker Compose의 구문을 배우지 않고도 Docker 환경을 정의할 수 있는 프로그래밍 언어 추상화로 보임. 테스트 환경이 사용 준비가 되었는지 알기 위해서는 여전히 Docker 네트워킹, 의존성, 헬스체크에 대한 이해가 필요함. 아홉 번째 댓글 요약: 모의 객체나 복잡한 환경 구성이 필요 없음. 테스트 의존성을 코드로 정의하고 테스트를 실행하면 컨테이너가 생성되고 삭제됨. 컨테이너로 통합 테스트를 실행할 수 있다고 해서 유닛 테스트가 필요 없다고 생각하는 것은 오해임. Docker 컨테이너를 설정하는 것은 간단하지만, 컨테이너를 시작하는 것은 고통스럽고 느림. 열 번째 댓글 요약: Java의 로고로 Duke를 사용하는 것에 대한 질문임.
Hacker News 의견
첫 번째 댓글 요약:
두 번째 댓글 요약:
세 번째 댓글 요약:
네 번째 댓글 요약:
다섯 번째 댓글 요약:
여섯 번째 댓글 요약:
일곱 번째 댓글 요약:
여덟 번째 댓글 요약:
아홉 번째 댓글 요약:
열 번째 댓글 요약: