테스트코드(Test Code)
-
6장 - 단위 테스트 스타일테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 7. 7. 00:01
6장에서 다루는 내용 단위 테스트 스타일 비교 함수형 아키텍처와 육각형 아키텍처의 관계 출력 기반 테스트로 전환 단위 테스트 스타일 3가지 테스트 스타일이 존재합니다. . 출력 기반 테스트 - 가장 품질 좋음 상태 기반 테스트- 두 번째로 좋은 선택 통신 기반 테스트- 간헐적 사용 출력 기반 테스트 테스트 대상 시스템(SUT)에 입력을 넣으면 생성되는 출력을 점검하는 방식입니다. 상품할인을 계산하는 클래스가 존재한다고 가정했을 때 상품을 넣으면 할인된 가격이 나와 해당 가격을 검증할 수 있습니다. 여기서 중요한점은 내부 컬렉션에 상품을 추가하거나, 데이터베이스에 저장하지 않습니다. 이 스타일을 함수형 스타일이라고도 하며 부작용이 없는 함수입니다. 상태 기반 테스트 상태기반은 클라이언트가 상품을 추가했을 ..
-
5장 - 목과 테스트 취약성테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 6. 30. 00:01
5장에서 다루는 내용 Mock과 Stub 구분 식별할 수 있는 동작과 구현 세부 사항 정의 목과 테스트 취약성 간의 관계 이해 리팩터링 내성 저하 없이 목 사용하기 테스트에서 Mock을 사용하는 것은 논란의 여지가 있는 주제입니다. 어떤 사람들은 훌륭한 도구라고 생각하며, 다른 사람들은 취약성을 초래한다고 말합니다. 테스트 대역 테스트 대역은 스턴트 대역이라는 개념에서 비롯되었습니다. 제라드 메스자로스에 따르면 테스트 대역은 더미, 스텁, 스파이, 목, 페이크 다섯 가지가 있습니다. 실제로는 목과 스텁의 두 가지 유형으로 나눌 수 있습니다. Mock은 외부로 나가는 상호 작용을 모방하고 검사하는데 도움이 됩니다. Stub은 내부로 들어오는 상호 작용을 모방하는데 도움이 됩니다. 이때 Stub과 상호작용하..
-
4장 - 좋은 단위 테스트의 4대 요소테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 6. 29. 00:01
4장에서 다루는 내용 좋은 단위 테스트의 관점 간 차이점 모색 이상적인 테스트 정의 테스트 피라미드 이해 블락박스 테스트 및 화이트박스 테스트 사용 좋은 테스트의 4가지 요소 회귀 방지 리팩터링 내성 빠른 피드백 유지 보수성 회귀 방지 소프트웨어의 버그로 코드를 수정한 후 기능이 의도한 대로 작동하지 않는 경우입니다. 회귀는 귀찮으며, 개발할 기능이 많을수록 새로운 릴리스에서 기능이 하나라도 고장 날 가능성이 높습니다. 테스트 중 실행되는 코드의 양은 많아야 하며, 복잡도, 도메인 유의성도 중요합니다. 복잡한 비즈니스 로직을 나타내는 코드가 보일러플레이트 코드보다 훨씬 더 중요합니다. 중요한 기능에서 발생한 버그가 가장 큰 피해를 입히기 때문입니다. 리팩터링 내성 테스트를 빨간색(실패)으로 바꾸지 않고 ..
-
3장 - 단위 테스트 구조테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 6. 22. 00:01
3장에서 다루는 내용 단위 테스트 구조 좋은 단위 테스트 명명법 매개변수화된 테스트 작성 AAA 패턴 AAA 패턴은 준비, 실행, 검증 부분으로 나누어 테스트를 작성합니다. 흔히 알고 있는 given, when, then 패턴과 굉장히 유사합니다. 여러 개의 준비, 실행, 구절 피하기 때로는 준비 -> 실행 -> 검증 -> 좀 더 실행 -> 다시 검증과 같은 테스트를 만날 수 있습니다. 실제로 종종 이런 테스트구조를 만들곤 했으며 여러 테스트는 오히려 soft copy처럼 보이고 귀찮으니.. 하지만 이렇게 되면 더 이상 단위 테스트가 아닌 통합 테스트입니다. 일련의 실행과 검증이 포함된 테스트를 보면 각 동작은 고유한 테스트로 분리하는 것이 좋습니다. 테스트 내 if문 피하기 if문이 발생하는것 자체가 ..
-
2장 - 단위 테스트란 무엇인가?테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 6. 14. 00:01
2장에서 다루는 내용 단위 테스트란? 공유 의존성, 비공개 의존성, 휘발성 의존성 간의 차이점 단위 테스트의 두 분파: 고전파와 런던파 단위 테스트, 통합 테스트, 엔드 투 엔드 테스트의 차이점 단위 테스트의 정의 작은 코드 조각을 검증하고, 빠르게 수행하고, 격리되고 자동화된 테스트 이때 격리 문제는 단위 테스트의 고전파와 런던파를 나누는 차이입니다. 격리는 테스트를 위해 하나의 클래스가 다른 클래스와 협력해야 하는 경우 이를 Mock으로 대체할지 실제 객체를 활용할지에 대한 이야기입니다. 런던파에서는 하나의 클래스가 다른 클래스 또는 여러 클래스에 의존하면 이 모든 의존성을 테스트 대역으로 대체해야 합니다. 즉, 외부 영향과 분리하여 테스트 대상 클래스에만 집중할 수 있어야 합니다. 이 방법은 장점으..
-
1장 - 단위 테스트의 목표테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 6. 10. 00:01
테스트를 작성하는 노력은 줄이고, 그에 따르는 이득은 극대화해야 한다. 단위 테스트의 현황 대부분의 프로그래머는 단위 테스트를 실천하고 중요성을 알고 있다. 그냥 쓰고 버리는 프로젝트가 아니면, 단위 테스트는 늘 적용해야 한다. 요새의 논쟁은 바뀌고 있다, 단위 테스트를 작성해야 하는가? -> 좋은 단위 테스트를 작성하는 것은 어떤 의미인가? 좋은 테스트와 좋지 않은 테스트의 차이는 취향이나 개인적인 선호도의 문제가 아닌 프로젝트의 성패를 가르는 문제다. 이 책은 테스트 작성 노력 대비 최대의 이익을 이끌어 내는 방법으로 안내한다. 단위 테스트의 목표 흔히 단위 테스트 활동이 더 나은 설계로 이어진다고 한다. 하지만 이는 단위 테스트의 주목표는 아니다. 단위 테스트의 목표는 소프트웨어 프로젝트의 성장을 ..
-
Mock 프레임워크란? (+ Mockito 프레임워크 사용 예시)테스트코드(Test Code) 2022. 5. 13. 14:40
Mock이란? https://junuuu.tistory.com/203?category=981663 Mock 객체란? Mock 객체란? Mock은 사전적 의미로 모조품이라는 뜻을 가집니다. 즉, 제품의 외양을 흉내 낸 모조품을 말하며 소프트웨어에서는 모듈의 겉모양이 실제 모듈과 비슷하게 보이도록 만든 가짜 객체 junuuu.tistory.com Mock 프레임워크란? Mock 객체를 직접 작성해서 명시적인 클래스로 만들지 않아도 됩니다. Mock 객체에 대해서 행위까지도 테스트 케이스에 포함시킬 수 있습니다. Mock 객체를 직접 만드는 것 자체가 별로 부담은 되지 않지만 Mock 클래스 숫자가 점점 늘어나게 되면 관리에 부담이 발생합니다. 따라서 Mock 프레임워크를 사용하면 Mock 객체를 편리하게 관..
-
테스트 코드 - 회원 관리 예제 실습(스프링 통합 테스트)테스트코드(Test Code) 2022. 4. 24. 15:26
이전에 했던 test는 순수하게 자바로 진행했지만 DB 정보들을 Spring이 가지고 있기 때문에 스프링과 함께 통합 테스트를 진행해야 합니다. 1. test/java/hello.hellospring.service 패키지에 MemberServiceIntegrationTest.java를 생성합니다. package hello.hellospring.service; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.List; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Bef..