DEV/JUnit
-
[JUnit] REST API 테스트 하기DEV/JUnit 2025. 1. 7. 20:55
REST란 (representational state transfer) 웹 서비스를 구현하기 위한 소프트웨어 아키텍처 스타일로REST를 만족하기 위해서는 많은 조건을 따라야한다. 이러한 조건을 따르는 웹 서비스를 RESTful 웹 서비스라고 한다. REST 아키텍처 스타일은 다음과 같이 6가지 요건을 정의한다.1. 클라이언트-서버 관계: 클라이언트와 서버는 서로 분리되어 있으며 각각 다른 역할을 한다.보통 클라이언트는 사용자에게 보여지는 부분과 관련 있고, 서버는 데이터 저장이나 도메인 모델 로직과 관련된다. 2. 무상태성: 서버는 클라이언트의 요청과 요청 사이에 클라이언트에 관한 상태 정보를 따로 보관해 두지 않는다.그러므로 클라이언트의 요청은 해당 요청에 응답하기 위해 필요한 모든 정보를 포함해야한다..
-
[JUnit] Spring Boot 애플리케이션 테스트DEV/JUnit 2024. 12. 10. 17:33
Spring Initializr 를 이용해 Spring 프로젝트 만들기https://start.spring.io/해당 페이지에서 스프링을 구동하기 위한 최소한의 설정을 가지고 스프링 부트 프로젝트 뼈대를 만들어줌- Explore : 생성될 프로젝트에 대한 세부정보 확인 가능- Generate : 프로젝트가 포함된 zip파일 다운로드 JUnit5로 테스트한 Spring 애플리케이션을 Spring Boot로 전환하기예제 코드 : https://github.com/devkunst/junit-in-action-third-edition-kr/tree/master/ch17-spring-boot/ch17-spring-boot-initializr-old-feature 1. 패키지 구조 설정- model : 모델 클래..
-
[JUnit] JUnit5 extension (확장 모델)DEV/JUnit 2024. 10. 22. 19:57
JUnit4의 경우 runner와 rule을 사용하여 테스트를 확장할 수 있었다.JUnit5 확장 모델은 Extension API라는 단일 개념으로 설명할 수 있다.Extension 자체는 내부에 필드나 메서드가 없는 인터페이스인 마커 인터페이스일 뿐이다. 마커 인터페이스?더보기태그 인터페이스 또는 토큰 인터페이스라고도 불리며 구현 메서드가 따로 없는 인터페이스로, 해당 인터페이스를 구현하는 클래스에 특별한 의미나 기능을 부여하기 위해 사용한다. 대표적인 사례로 Serializable, Cloneable 인터페이스가 있다. Serializable 인터페이스에는 구현 메서드가 없지만 해당 인터페이스를 구현하는 클래스는 직렬화 속성을 갖는다는 것을 나타낼 수 있다. * 사용 목적JUnit5 extensi..
-
[JUnit] 모의 객체 프레임워크 EasyMock / JMock / MockitoDEV/JUnit 2024. 9. 11. 00:06
모의 객체를 사용하기 위한 유용한 클래스를 제공하는 오픈 소스 프레임워크- EasyMock- JMock- Mockito EasyMockmaven org.easymock easymock 5.4.0 gradletestImplementation group: 'org.easymock', name: 'easymock', version: '5.4.0' EasyMock을 활용한 TestAccountServiceimport org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import static org.easymock.EasyMock.*;import static..
-
[JUnit] 모의객체를 활용해 리팩터링하기DEV/JUnit 2024. 8. 27. 09:03
테스트를 단순하게 만들 목적으로 런타임 코드를 변경해서는 안된다는 통념이 있다. 그러나 이는 옳지않다.단위 테스트는 런타임 코드의 가장 중요한 클라이언트이며, 코드가 테스트하기에 충분히 유연하지않다면 코드를 수정하는 것은 당연하다. 다음 예제에서 문제를 찾아보자.import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;public class DefaultAccountManager1 implements AccountManager { private static final Log logg..
-
[JUnit] 모의 객체로 테스트하기DEV/JUnit 2024. 8. 25. 23:09
모의객체를 사용하면 가능한 한 가장 세밀한 수준에서 테스트를 실행할 수 있다.각 메서드별로 개별적인 단위 테스트를 만들어 개발하는 것이 가능하다. 모의 객체란?모의 객체는 비즈니스 로직의 일부만을 다른 부분과 격리해 테스트하는데 적합하다. 모의 객체는 테스트 대상인 메서드가 사용하는 객체를 대체하여 테스트 대상 메서드는 다른 객체와 격리되는 효과가 생긴다. 다른 클래스나 메서드와 격리된 상태에서 테스트를 하면 큰 이점이 있다. 격리된 상태에서의 테스트는 다른 부분의 코드가 완성되는 것을 기다리지 않고 한 부분의 코드를 단위 테스트하는 데 큰 도움이 된다.모의 객체를 사용할 때의 가장 큰 장점은 메서드에 집중하는 테스트를 만들 수 있다는 것이다. 모의 객체를 사용하면 테스트 대상 메서드가 다른 객체를 호출..
-
[JUnit] 스텁을 활용한 테스트DEV/JUnit 2024. 7. 14. 23:26
애플리케이션을 개발하다보면 몇몇 코드가 다른 클래스나 외부 환경에 의존하는 경우가 있다.특정한 런타임 환경에 의존하는 애플리케이션을 위한 단위 테스트를 작성하기는 매우 어렵다. 실제로 필요한 환경을 테스트의 일부로 구성하여 테스트를 수행하는것은 효과적이나 이는 항상 가능한 방법이 아니다.실제 장비 지원 없이도 소스 코드에 대한 테스트를 지속적으로 작성하고 실행할 수 있도록 가짜 객체를 활용해야 하는데, 방법은 스텁과 모의객체를 활용하는 것 두 가지가 있다. 이번 글에서는 스텁을 활용한 방법을, 다음 글에서는 모의 객체를 활용하는 방법을 정리하고자한다. 스텁호출자를 실제 구현 코드에서부터 격리하기 위해 실제 코드 대신 런타임에 동작하는 코드를 말한다. 단순하게 만든 스텁으로 실제 코드의 복잡한 기능을 대체..
-
[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가 만들어진 이유 중 하..