테스트코드(Test Code)
-
ArchUnit Test로 컨벤션 강제하기테스트코드(Test Code) 2025. 1. 18. 13:55
개요ArchUnit에 대해서 알아보고 ArchUnit을 활용하여 어떻게 컨벤션을 강제할 수 있는지 글을 작성해보려고 합니다. ArchUnit이란?ArchUnit은 패키지와 클래스, 레이어와 슬라이스 간의 종속성을 검사하고 순환 종속성 등을 확인할 수 있습니다. 주어진 Java 바이트코드를 분석하고 모든 클래스를 Java 코드 구조로 가져와서 이를 수행합니다. 실습 - gradle 세팅dependencies { // 글 작성 기준 공식문서 가이드 버전 testImplementation("com.tngtech.archunit:archunit-junit5:1.3.0") } 실습 - ArchUnit으로 의존성 강제하기class ArchitectureTest { private val import..
-
easyRandom으로 테스트코드를 편하게 작성하기테스트코드(Test Code) 2024. 6. 6. 17:55
테스트 코드를 작성할 때 불편한 것들테스트 코드를 작성할 때 흔히 겪는 불편함은 무엇일까요?의존성을 mocking 하거나 stubbing 하는 작업, 테스트 데이터 관리는 항상 골치 아픈 부분입니다.이러한 작업은 실제 테스트를 수행하기 위해 많은 시간과 노력을 요구합니다. 예시 - Request의 필드가 100개라면data class TooManyField( val col1: String, val col2: String, val col3: String, // ... val col100: String,)1. 100개의 필드를 일일이 작성하고 관리하는 것은 번거롭고 시간이 많이 걸립니다.2. 테스트 코드의 가독성이 떨어져 이해하기 어려워집니다. ..
-
인수테스트란 무엇인가?테스트코드(Test Code) 2023. 12. 28. 00:01
개요 nextstep이라는 교육기관을 보면 ATDD에 대한 강의가 존재합니다. 테스트 주도 개발(TDD)에 A가 붙어있습니다. 이때의 AT는 Acceptance Test의 약어로 인수 테스트를 의미합니다. 인수테스트를 도입하기 앞서 "인수테스트가 무엇인가?" 에 대해 알아보고자 합니다. 우리가 흔히 진행하는 구현과 테스트 검증(Verification)과 검수(Validation)를 통해 소프트웨어를 만들어나갑니다. V모델이라고 불리며 각 단계를 완전히 종료한 후 다음 단계로 넘어가는 방식으로 변경이 발생했을 때 가장 비용이 많이 발생합니다. 인수테스트란? Acceptance Test라고 불리며 인수테스트 혹은 수락 테스트라고 불립니다. Accetance는 영어로 수락이라는 의미를 가집니다. 인수라는 의미..
-
11장 - 단위 테스트 안티 패턴테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 8. 18. 00:01
11장에서 다루는 내용 비공개 메서드 단위 테스트 단위 테스트를 하기 위한 비공개 메서드 노출 테스트로 유출된 도메인 지식 구체 클래스 목 정리 비공개 메서드를 테스트해야 하는가? 이 질문은 자주 받는 질문이며 짧게 대답하면 하지 말아야 합니다. 테스트의 원칙 중 하나인 식별할 수 있는 동작만 테스트해야 합니다. 비공개 메서드를 테스트하는 것은 구현 세부사항과 결합되고 리팩터링 내성이 떨어지게 됩니다. 따라서 직접 테스트하지 않고 간접적으로 테스트하는 것이 좋습니다. 비공개 메서드가 덩치가 너무 커진 경우는 오히려 추상화를 통해 별도의 클래스를 추출해야 할 수 있습니다. 물론 정말 정말 특별한 경우라면 리플랙션을 통해 테스트할 수 있다. 책에서는 ORM에서 비공개 생성자를 이용하지만 중요한 로직이라 테스..
-
10장 - 데이터베이스 테스트테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 8. 17. 00:01
10장에서 다루는 내용 데이터베이스 테스트를 위한 전제 조건 데이터베이스 테스트 모범 사례 테스트 데이터 생명 주기 테스트 내 데이터베이스 트랜잭션 관리 데이터베이스 테스트를 위한 전제 조건 목을 사용하지 않으면 테스트하기 힘들 수 있습니다. 데이터베이스를 형상 관리 시스템에 유지 Git과 같은 형상 관리 시스템에 데이터베이스를 저장하는 것이 최선이다. (예시: Flyway) 그렇지 않다면 버그 재현을 위해 과거의 특정 시점으로 되돌리기 어렵다. 참조 데이터도 데이터베이스 스키마다 애플리케이션이 데이터를 수정할 수 있으면 일반 데이터이며, 그렇지 않으면 참조 데이터이다. 애플리케이션이 참조 데이터를 수정하지 못하게 해야한다. 개발자마다 별도의 데이터베이스 인스턴스를 활용 데이터베이스 트랜잭션 관리 트랜잭..
-
9장 - 목 처리에 대한 모범 사례테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 8. 10. 00:01
9장에서 다루는 내용 목의 가치 극대화 하기 목을 스파이로 교체하기 목 처리에 대한 모범 사례 목은 비관리 의존성에만 적용해야 합니다. 다른 부분에 목을 적용하면 깨지기 쉬운 테스트(리팩터링 내성이 없는 테스트)가 됩니다. 목에 관해서 위의 지침만 잘 지키면 70% 이상의 성공을 거둘 수 있습니다. 목의 가치 극대화 하기 최대한 육각형 아키텍처의 바깥쪽에 있는 클래스를 모킹 하라. 내부의 클래스를 모킹 하는 경우에는 구현 세부 사항이 노출될 수 있기 때문이다. 목을 스파이로 대체하기 스파이는 수동으로 작성하는 반면에 목은 프레임워크의 도움을 받아 생성하는 것이 유일한 차이점이다. 스파이 = 실제로 개발자가 작성한 Mock 책에서는 Spy를 직접 인터페이스를 통해 생성하고 내부 메서드에 Assert까지 추..
-
8장 - 통합 테스트를 하는 이유테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 7. 23. 00:01
8장에서 다루는 내용 통합 테스트의 역할 이해 테스트 피라미드의 개념 자세히 살펴보기 가치 있는 통합 테스트 작성 단위 테스트에만 전적으로 의존하면 시스템이 전체적으로 잘 동작하는지 확신할 수 없습니다. 각 부분이 데이터베이스나 메시지 버스 등의 외부 시스템과 어떻게 통합되는지 확인해야 합니다. 예를 들어 다음과 같은 경우가 있을 수 있습니다. 단위 테스트는 통과했지만 Spring Bean Wiring이 되지 않아 애플리케이션이 실행되지 않을 수 있습니다. 통합 테스트란? 간단하게 단위 테스트가 아닌 모든 테스트는 통합 테스트이다. 통합 테스트가 어려운 이유 2가지 관련된 협력자가 많아 테스트가 비대해짐 프로세스 외부 의존성 운영이 필요 빠른 피드백, 유지 보수성을 포기하는 대신 회귀 방지와 리팩토링 내..
-
7장 - 가치 있는 단위 테스트를 위한 리팩터링테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 7. 8. 00:01
7장에서 다루는 내용 네 가지 코드 유형 알아보기 험블 객체 패턴 이해 가치 있는 테스트 작성 리팩터링이 필요한 이유 기반 코드를 리팩터링 하지 않고서는 테스트 코드를 크게 개선할 수 없습니다. 코드의 네 가지 유형 도메인 모델 및 알고리즘 : 노력대비 가장 이로운 테스트 지나치게 복잡한 코드 : 한 가지 예로 덩치가 큰 컨트롤러로 모든 작업을 스스로 하는 컨트롤러 컨트롤러 간단한 코드 지나치게 복잡한 코드가 가장 문제가 되며 단위 테스트하기 어렵지만 테스트를 하지 않는 것은 너무 위험합니다. 지나치게 복잡한 코드의 경우 도메인 모델 및 알고리즘, 또는 컨트롤러로 나누어 리팩터링 해야 합니다. 가장 이상적으로는 지나치게 복잡한 코드가 존재하면 안 됩니다. 험블 객체 패턴을 사용해 지나치게 복잡한 코드 분..