분류 전체보기
-
[JUnit] 모의 객체로 테스트하기DEV/JUnit 2024. 8. 25. 23:09
모의객체를 사용하면 가능한 한 가장 세밀한 수준에서 테스트를 실행할 수 있다.각 메서드별로 개별적인 단위 테스트를 만들어 개발하는 것이 가능하다. 모의 객체란?모의 객체는 비즈니스 로직의 일부만을 다른 부분과 격리해 테스트하는데 적합하다. 모의 객체는 테스트 대상인 메서드가 사용하는 객체를 대체하여 테스트 대상 메서드는 다른 객체와 격리되는 효과가 생긴다. 다른 클래스나 메서드와 격리된 상태에서 테스트를 하면 큰 이점이 있다. 격리된 상태에서의 테스트는 다른 부분의 코드가 완성되는 것을 기다리지 않고 한 부분의 코드를 단위 테스트하는 데 큰 도움이 된다.모의 객체를 사용할 때의 가장 큰 장점은 메서드에 집중하는 테스트를 만들 수 있다는 것이다. 모의 객체를 사용하면 테스트 대상 메서드가 다른 객체를 호출..
-
[JUnit] 스텁을 활용한 테스트DEV/JUnit 2024. 7. 14. 23:26
애플리케이션을 개발하다보면 몇몇 코드가 다른 클래스나 외부 환경에 의존하는 경우가 있다.특정한 런타임 환경에 의존하는 애플리케이션을 위한 단위 테스트를 작성하기는 매우 어렵다. 실제로 필요한 환경을 테스트의 일부로 구성하여 테스트를 수행하는것은 효과적이나 이는 항상 가능한 방법이 아니다.실제 장비 지원 없이도 소스 코드에 대한 테스트를 지속적으로 작성하고 실행할 수 있도록 가짜 객체를 활용해야 하는데, 방법은 스텁과 모의객체를 활용하는 것 두 가지가 있다. 이번 글에서는 스텁을 활용한 방법을, 다음 글에서는 모의 객체를 활용하는 방법을 정리하고자한다. 스텁호출자를 실제 구현 코드에서부터 격리하기 위해 실제 코드 대신 런타임에 동작하는 코드를 말한다. 단순하게 만든 스텁으로 실제 코드의 복잡한 기능을 대체..
-
소프트웨어 테스트 품질DEV/ETC 2024. 7. 8. 18:36
테스트 품질을 검증하기 위해 테스트 커버리지 도구를 이용하여 테스트가 커버한 코드와 커버하지 못한 코드가 얼마나 되는지 확인하고, 해당 테스트가 얼마나 유용한지 계산해보자.그리고 품질에 초점을 둔 소프트웨어 개발 프로세스인 TDD와 BDD에 대해 알아보자. 1. 테스트 커버리지 측정하기테스트 커버리지는 그 자체로 코드의 품질을 어느정도 보장한다. 하지만 높은 테스트 커버리지가 테스트의 질을 보장하지는 않는다. 훌륭한 개발자는 테스트를 실행하여 얻어 낸 기계적인 백분율 수치 이상을 볼 수 있어야 한다. 1-1. 테스트 커버리지란 ?테스트 커버리지를 계산하는 데 다양한 지표를 사용할 수 있다. 가장 기본적인 지표는 테스트 묶음을 실행하는 동안 호출되는 애플리케이션의 메서드나 코드 줄의 수를 가지고 나타낸 백..
-
소프트웨어 테스트 원칙과 유형DEV/ETC 2024. 7. 4. 02:57
단위 테스트를 하는 이유단위 테스트의 핵심 목표는 애플리케이션이 예상대로 작동하는지 확인하고 사전에 버그를 찾아내는 것.기능 테스트로도 작동을 확인하고 버그를 찾을 수 있지만, 단위 테스트를 수행했을 때 다음과 같은 장점이 있다. - 기능 테스트만 수행했을 때보다 테스트 커버리지를 높일 수 있다.: 단위 테스트는 기능 테스트로는 수행하기 어렵거나 불가능한 오류 조건에 대해서도 쉽게 테스트 할 수 있다. - 팀 생산성이 향상된다.: 단위 테스트를 활용하면 다른 컴포넌트가 준비될 때까지 기다리지 않고 질적으로 우수한 코드를 전달 할 수 있다.반면 기능 테스트는 테스트를 실행 하기 전에 전체 애플리케이션 혹은 상당 부분이 준비되어 있어야한다. - 회귀를 사전에 발견하여 디버깅 작업을 줄일 수 있다.: 단위 테..
-
[JUnit] JUnit4에서 JUnit5로 마이그레이션DEV/JUnit 2024. 6. 30. 01:38
왜 JUnit4에서 JUnit5로 전환해야하며, JUnit5가 등장한 이유가 무엇일까?JUnit in action에서 자세히 다루고 있어 가볍게 정리하고 넘어가고자한다.JUnit4 아키텍처, JUnit5 아키텍처 비교JUnit4는 단순한 모놀리식 아키텍처를 가지고 있다.JUnit4의 모든 기능은 jar파일(junit.jar) 한개 안에 들어 있다.이는 개발자가 JUnit4를 사용하고자한다면 클래스패스에 단일 jar만 추가하면 된다는 뜻이다. 단일 jar파일로도 동작이 가능하지만, JUnit4의 기능을 조금 더 확장해서 사용하는 것이 일반적이다.JUnit4 runner, rule을 활용하여 테스트를 확장 할 수 있으나 runner의 리플렉션 사용은 캡슐화를 저해한다.이는 JUnit5가 만들어진 이유 중 하..
-
[JUnit] JUnit 핵심 (3) 의존성 주입 / 반복 테스트 / 파라미터 테스트 / 동적 테스트 / Hamcrest vs AssertJDEV/JUnit 2024. 6. 26. 03:00
JUnit5 이전에는 생성자나 메서드에 파라미터가 있는 것을 허용하지 않았고 테스트는 반드시 기본 생성자만 사용해야했다.JUnit5부터는 이러한 부분이 의존성 주입으로 사용 가능하게 되었다. ParameterResolver 인터페이스는 런타임에 파라미터를 동적으로 리졸브한다.현재 JUnit5에는 3개의 리졸버가 기본으로 내장되어있다.다른 파라미터 리졸버를 사용하려면 @ExtendWith로 적절한 extension을 적용하여 파라미터 리졸버를 명시해야한다. - TestInfoParameterResolver: 현재 실행중인 테스트나 컨테이너에 관한 정보를 제공하기 위해 사용되는 TestInfo 객체를 파라미터로 사용 가능디스플레이 네임, 테스트 클래스, 테스트 메서드, 관련 태그 정보 등import org...
-
[JUnit] JUnit 핵심 (2) 중첩 테스트 / 태그 테스트 / 단언문 / 가정문DEV/JUnit 2024. 6. 20. 21:59
- 중첩 테스트 : @Nested 애노테이션을 사용하여 내부 클래스와 외부 클래스 중첩 테스트개발자가 비즈니스 로직을 잘 따르게 하고, 분명한 테스트 코드를 작성하도록 유도하여 개발자가 테스트 프로세스에 자연스럽게 적응하도록 만든다.결합도 관점에서 개발자가 테스트 그룹 간의 관계를 표현하는 데에도 도움이 된다.package com.study.junit.ch02;import static org.junit.jupiter.api.Assertions.*;import org.junit.jupiter.api.Nested;import org.junit.jupiter.api.Test;import java.text.ParseException;import java.time.LocalDate;import java.time...
-
[JUnit] JUnit 핵심 (1) 생애주기와 동작원리 / 테스트 클래스와 메서드 / 애노테이션DEV/JUnit 2024. 6. 20. 15:26
TDD 하고싶어서 학습하는 JUnit 프레임워크, 책을 기반으로 학습하고 정리하고자한다. 참고 도서https://www.yes24.com/Product/Goods/126579542 JUnit IN ACTION 3판 - 예스24자바 단위 테스트를 위해 알아야 할 모든 것JUnit은 자바 애플리케이션을 단위 테스트하기 위한 사실상의 표준이다. 자바 개발자에게 JUnit은 이제 필수가 되었다. 특히 JUnit 5에서는 모던 자바(자www.yes24.com 해당 책에서는 JUnit5를 주로 다루고 JUnit4와 비교하는 부분이 있을 것으로 보인다. 샘플 코드https://github.com/devkunst/junit-in-action-third-edition-kr GitHub - devkunst/junit-in..