Spring & SpringBoot/Testing 4

@SpringBootTest, @AutoConfigureMockMvc 사용하여 API Flow 테스트 케이스 작성하기

앞서 주로 비즈니스 클래스의 메서드들이 기능에 맞게 잘 동작하는지 확인하는 테스트인 단위 테스트를 위주로 공부했다. 하지만 API를 개발할 때 주로 Controller, Service, repository로 계층을 나누어 각각의 역할을 수행하도록 구현하기 때문에 각 계층별로 흐름이 잘 연결이 되는지 검증이 필요하다. 이번에는 전체적인 API의 흐름을 테스트하는 테스트 케이스를 작성해보자. 위의 코드는 이메일과 이름, 핸드폰 번호를 입력받아서 회원가입을 진행하는 API에 대한 Controller를 테스트하는 코드이다. 아래에서 하나하나 살펴보자. 먼저 위 코드처럼 테스트를 하기 위해서는 Cson이라는 객체를 Json으로 변환해주는 라이브러리를 추가해주어야 한다. implementation 'com.goog..

JUnit Assertion 대신 Hamcrest를 이용하여 테스트 코드 작성하기

Hamcrest Hamcrest는 JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework이다. Assertion을 위한 Matcher가 자연스러운 문장으로 이어지므로 가독성이 향상된다. 테스트 실패 메시지를 이해하기 쉽다. 다양한 Matcher를 제공한다. 이러한 이유로 JUnit에서 지원하는 Assertion 메서드보다 많이 사용된다. Hamcrest의 Matcher 이용하기 assertionTest1()은 JUnit의 Assertion을 이용하여 작성한 테스트 코드이다. assertionTest2()는 Hamcrest의 Matchers를 이용하여 작성한 테스트 코드이다. 두 코드 모두 같은 테스트를 하고 있는 테스트이다. 하지만 Assertion을 사용하는 부분에서 차이..

JUnit Assertion 메서드, 테스트 케이스 작성 애너테이션

테스트 케이스 작성에 실제 사용되는 메서드들을 간략하게 정리해본다. JUnit을 사용하지 않고도 테스트 케이스를 작성할 수는 있지만 JUnit을 사용하면 테스트 케이스를 돌리기 위한 main 메서드를 따로 작성하지 않아도 되고, 편리한 검증 api들을 제공해 빠른 테스트 케이스 작성을 가능하게 해준다. JUnit JUnit은 Java로 만들어진 애플리케이션을 테스트하기 위한 오픈 소스 테스트 프레임워크로 가장 많이 사용되고 있는 테스트 프레임워크이다. 스프링부트 또한 JUnit을 디폴트 프레임워크로 채택하고 있다. 스프링부트 프로젝트를 생성하면 아래 dependency가 기본으로 포함되어 있는데, 여기에 JUnit도 포함되기에 별다른 설정 없이 사용할 수 있다. testImplementation 'org..

여러 테스트 방식, 단위테스트의 FIRST 원칙, GWT(given-when-then)

그동안 프로젝트를 하는 동안 따로 테스트 코드를 작성하지 않고 하나의 기능이 완료된 후에 postman을 통해서 api를 실행해보는 방식으로 테스트를 진행해왔다. 이렇게 할 경우, 하나의 기능이 모두 완성된 상태에서 테스트가 진행되기 때문에 만약 에러가 발생한다면 에러가 발생하는 부분을 찾는데 시간이 오래 걸릴 뿐만 아니라 정밀하게 테스트를 하는 데 있어서 한계가 있었다. 그래서 실제 서버를 배포한 후에 에러를 발견해서 고친 적도 여러 번이다. 점점 테스트 케이스를 만들고 테스트 코드를 작성하는 습관을 들여야겠다는 생각을 하게 되어 이번에 테스트 코드를 작성하는 데 있어서 필요한 내용을 간략하게 정리하고 가려고 한다. 여러 테스트 방식 기능 테스트 기능 테스트는 주로 애플리케이션을 사용하는 사용자 입장에..