• 테스트 코드 개념
given - when - then 패턴으로 테스트 코드를 작성한다
Junit이나 AssetJ를 이용해서 테스트 코드를 작성한다
• Junit 테스트 작성
*Assertions 는 Junit껄로 임포트한다
public class JUnitTest {
@DisplayName("1 + 2 = 3이다")
@Test
public void junitTest(){
int a = 1;
int b = 2;
int sum = 3;
Assertions.assertEquals(a+b, sum);
}
}
•자주 사용하는 JUnit 테스트 어노테이션
public class JUnitCycleTest {
@BeforeAll
static void beforeAll() {
System.out.println("@BeforeAll");
}
@BeforeEach
public void beforeEach() {
System.out.println("@BeforeEach");
}
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
@Test
public void test3() {
System.out.println("test3");
}
@AfterAll
static void afterAll() {
System.out.println("@AfterAll");
}
@AfterEach
public void afterEach() {
System.out.println("@AfterEach");
}
}
@BeforeAll : 전체 테스트 실행 전 한번만 실행, 한번만 호출되기에 메서드를 static으로 선언
@BeforeEach : 각 테스트 케이스를 시작하기 전 매번 실행
@AfterAll : 테스트가 종료되기전 한번 실행
@AfterEach : 각 테스트를 종료하기 전 매번 실행
• AssertJ 사용
assertThat(a + b).isEqualTo(sum) <- 명확하게 a+b가 sum이랑 같은지 비교하는걸로 읽힌다
• 제대로 테스트 코드 작성해보기
* 테스트 코드에서는 생성자 주입이 되지 않기에 필드 주입을 사용한다
package hoshi03.study.springbootdeveloper;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@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()));
}
}
'스프링 부트 3으로 백엔드 입문하기' 카테고리의 다른 글
6장 API 만들기 (0) | 2023.11.23 |
---|---|
5장 ORM (0) | 2023.11.22 |
3장 스프링 부트 3 구조 이해하기 (1) | 2023.11.21 |
2장 스프링 부트 3 시작하기 (0) | 2023.11.21 |
1장 스프링 기초 지식 (0) | 2023.11.21 |