
@BeforeAll: 전체 테스트를 시작하기 전 한 번만 실행.
전체 테스트 주기 중 한 번만 호출되어야 하기 때문에 static으로 선언.
ex) 데이터베이스 연결, 테스트 호나경 초기화
@BeforeEach: 테스트 케ㅔ이스를 시작하기 전에 매번 실행.
ex) 객체 초기화, 테스트에 필요한 값을 미리 넣을 때 사용.
@AfterAll: 전체 테스트를 마치고 종료하기 전 한 번말 실행.
전체 테스트 주기 중 한 번말 실행되어야 하기 때문에 static으로 선언.
ex) 데이터베이스 연결 종료, 공통적으로 사용하는 자원 해제할 때 사용.
@AfterEach: 각 테스트 케이스를 종료하기 전 매번 실행.
ex) 테스트 이후 특정 데이터를 삭제해야 하는 경우

Assertions.assertEqaul(a + b, sum)
예를 들어 이 코드를, assertj를 사용하면 다음과 같이 가독성 있게 작성할 수 있다.
assertThat(a + b).isEqualTo(sum)
@SpringBootTest
@AutoConfigureMockMvc
class TestControllerTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Autowired
private MemberRepository memberRepository;
@BeforeEach
public void mockMvcSetUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.build();
}
@AfterEach
public void cleanUp() {
memberRepository.deleteAll();
}
@DisplayName("getAllMembers: 아티클 조회에 성공한다.")
@Test
public void getAllMembers() throws Exception {
// given
final String url = "/test";
Member savedMember = memberRepository.save(new Member(1L, "홍길동"));
// when
final ResultActions result = mockMvc.perform(get(url) // 1
.accept(MediaType.APPLICATION_JSON)); // 2
// then
result
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].id").value(savedMember.getId()))
.andExpect(jsonPath("$[0].name").value(savedMember.getName()));
}
}
MockMvc는 애플리케이션을 서버에 배포하지 않고도 테스트용 MVC환경을 만들어 요청 및 전송, 응답 기능을 제공하는 유틸리티 클래스이다. 즉, 컨트롤러를 테스트할 때 사용되는 클래스이다.

ㆍandExpect()
: 응답의 상태 코드, 내용, 헤더 등을 검증하는 데 사용된다.
ㆍ andDo()
: 테스트 실행 중에 추가 작업을 수행하는 데 사용된다. 예를 들어, 로그를 출력하거나 디버깅에 도움이 되는 정보를 수집하는 등의 작업을 수행할 수 있다.
ㆍandReturn()
: 컨트롤러 메서드가 반환한 객체나 데이터를 가져오는데 사용된다. 이를 통해 컨트롤러에서 반환한 객체를 테스트에서 활용할 수 있다.
ㆍandDo(print())
: 요청 및 응답의 내용을 콘솔에 출력하는 데 사용된다. 주로 디버깅 시 사용된다
MockHttpServletRequestBuilder 제공 메서드
get(String url, ...)
post(String url, ...)
put(String url, ...)
delete(String url, ...)
각 메서드별로 URL, URL 매개변수, Query 매개변수 등을 인자로 줄 수 있다.
해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽