보라코딩

스프링부트 테스트 본문

코딩/Spring

스프링부트 테스트

new 보라 2023. 7. 25. 21:56
pom,xml

스프링부트 테스트 의존성 추가

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

 

test 시에는 H2 데이터베이스 사용

(그밖에는 MariaDB 사용)

  <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>

 

 

 

 

 

단위 테스트 만들기

 

 

 

이미 준비된&nbsp; CardatabaseApplicationTests

 

 

 

 

CardatabaseApplicationTests

컨트롤러의 인스턴스가 정상적으로 생성되고 주입되었는지 확인하기 위한 코드

package com.packet.cardatabase;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.packet.cardatabase.web.CarController;

@SpringBootTest
class CardatabaseApplicationTests {

@Autowired
private CarController controller;

@Test
void contextLoads() {
assertThat(controller).isNotNull();
}

}

 

 

 

Run As -> JUnit test 선택

 

 

 

 

 

 

 

테스트 케이스 이름 지정하고 싶다면

@Test
@DisplayName("First example test case")

 

 

 

 

 

 

CRUD 작업 단위테스트

 

 

 

 

OwnerRepositoryTest
package com.packet.cardatabase;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.Optional;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import com.packet.cardatabase.domain.Owner;
import com.packet.cardatabase.domain.OwnerRepository;

@DataJpaTest
public class OwnerRepositoryTest {

@Autowired
private OwnerRepository repository;

@Test // 새 owner 객체 생성하고 save로 저장 후 검색되는지 확인
void saveOwner() {
repository.save(new Owner("Lucy", "Smith"));
assertThat(repository.findByFirstname("Lucy").isPresent()).isTrue();
}


@Test // 소유자 삭제 기능 테스트
void deleteOwners() {
repository.save(new Owner("Lisa","Morrison"));
repository.deleteAll();
assertThat(repository.count()).isEqualTo(0);
}

}

 

 

 

 

 

JWT 인증 기능 테스트

 

 

 

CarRestTest

 

MockMVC 객체는 서버 시작되지 않지만 스프링이 HTTP 요청을 처리하는 계층에서 실제상황을 모의 테스트할 수 있다.

 

package com.packet.cardatabase;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

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.HttpHeaders;
import org.springframework.test.web.servlet.MockMvc;

@SpringBootTest
@AutoConfigureMockMvc
public class CarRestTest {

@Autowired
private MockMvc mockMvc;

@Test
public void testAuthentication() throws Exception {

// 올바른 자격 증명으로 인증 테스트
        this.mockMvc.
           perform(post("/login").
           content("{\"username\":\"admin\", \"password\":\"admin\"}").
           header(HttpHeaders.CONTENT_TYPE, "application/json")).
           andDo(print()).andExpect(status().isOk());
}
}