클래스 간 의존관계가 없는 자바 어플리케이션에서는 JUnit만으로도 테스트가 가능하다. 그러나 스프링의 핵심 개념인 DI(Dependency Injection), 즉 의존관계 주입으로 인해 각 클래스 간 의존관계가 생겨 테스트가 힘들어지게 된다. 대표적인 예를 들어보자. 스프링으로 웹 개발을 할 때 일반적으로 Controller - Service - Repository 계층을 구성하며 Controller는 Service를, 다시 Service는 Repository를 의존하게 된다. 이때 Service 계층을 테스트하려고 테스트 코드를 작성하고 실행 버튼을 눌렀더니 테스트에 실패했다. 비즈니스 로직은 아무리 봐도 잘못된 것이 없는데... 아뿔싸 Service가 의존하고 있던 Repository 계층에 잘못..
대부분의 테스트는 특정 메소드에 특정 인자를 전달하였을 때 기대한 값이 맞는지 확인하는 방식으로 이루어진다. 이때 전달하는 인자로 일반적인 값뿐만 아니라 edge case 혹은 corner case 등까지 포함해야 제대로 된 테스트라 할 수 있다. 아래와 같이 A 클래스에서 인자로 전달된 값을 바로 반환하는 메소드를 테스트한다고 가정해보자. 메소드가 제대로 동작하는지 확인하기 위해서는 하나의 값 뿐만 아니라 다양한 케이스에 해당하는 값들을 인자로 넘겨 테스트를 수행해야 한다. 그런데 아래와 같이 get 테스트 대상 메소드에 전달하는 인자 별로 테스트 메소드를 분리하게 되면, 중복 코드가 많아지고 테스트 클래스의 크기도 커져 무엇을 테스트 하고 있는지 한눈에 알아보기 어려워진다. 따라서 JUnit에서는 테..
지난 글에서는 JUnit이 제공하는 Assertions에 대해 알아보았다. 이번에 알아볼 AssertJ의 Assertions는 JUnit의 Assertions 보다 더 유연하고 가독성 있는 테스트 코드를 작성할 수 있게 해주며, 특히 자바 8의 함수형 프로그래밍의 특징들을 잘 활용할 수 있게 해준다. 그럼 이 AssertJ가 뭔지 간단히 살펴보고 AssetJ의 Assertions 메소드들을 자주 사용하는 것들 위주로 정리해보자. JUnit 자바 기반 테스트 자동화 프레임워크 AssertJ 자바 기반 테스트에서 Assertions를 작성하기 위한 오픈소스 라이브러리 즉 JUnit에 비해 AssertJ가 Assertion에 더 특화되어 있다고 보면 된다. 자바에서 AssertJ를 사용하기 위해서는 build..
단위 테스트에서는 특정 메소드의 반환값이 예상값과 같은지, 메소드 호출 시 전달되는 인자에 따라 특정 예외가 발생하는지 등을 검증해야 한다. 이를 위해 실제 if문 또는 try-catch문 등을 사용하여 직접 검증할 수도 있지만 자바에서는 보다 편리하게 이를 수행할 수 있는 방법이 존재한다. 이번 글에서는 조금 쉬어가는 타임으로 JUnit이 제공하는 검증을 위한 유틸리티 메소드인 Assertions에 대해 알아보고자 한다. 자바에서 단위 테스트를 한번이라도 해본적이 있다면 Assertions 클래스를 제공하는 2개의 패키지가 있다는 것을 알 것이다. 바로 JUnit과 AssertJ이다. 먼저 JUnit의 Assertions 메소드를 자주 사용하는 것들 위주로 살펴보자. assertEquals & asse..
- Total
- Today
- Yesterday
- Spring Security
- 모두의 리눅스
- spring boot
- 템플릿 콜백 패턴
- QueryDSL
- rest api
- 단위 테스트
- junit5
- Front Controller
- Git
- facade 패턴
- github
- C++
- spring
- servlet filter
- Gitflow
- Linux
- ParameterizedTest
- SSE
- 전략 패턴
- spring aop
- Transaction
- 디자인 패턴
- mockito
- vscode
- Java
- Assertions
- 서블릿 컨테이너
- JPA
- FrontController
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |