--- 저를 위한 공부입니다
많은 부분이 생략되어 있습니다 ---
1. Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing // JPA Auditing 활성화 어노테이션
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
// 내장 WAS를 실행(톰캣 따로 설치할 필요가 없어짐)
}
}
스프링부트를 사용하면 아주 익숙한!
이 Applicaion 클래스의 SpringApplication.run(Application.class, args);로
내장 WAS를 실행해 서버를 가동함
HelloController를 예시로 스프링부트와 테스트 코드 기기기기초에 대해 알아보자
2. HelloController.java
import com.springboot_ex01.book.web.dto.HelloResponseDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name") String name, @RequestParam("amount") int amount){
return new HelloResponseDto(name, amount);
}
}
* RestController : 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줌
전에 SpringFramework 쓸 때 @ResponseBody를 메소드마다 선언했던 걸 하지 않고
한번에 사용할 수 있게 해준다고 생각하면 됨
3. HelloResponseDto.java
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
* RequiredArgsConstructor : 선언된 모든 final 필드가 포함된 생성자를 생성
→ final이 없는 필드는 생성자에 포함하지 X
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void returnHello() throws Exception{
String hello = "hello";
mvc.perform(get("/hello")) // MockMvc를 통해 /hello 주소로 HTTP GET 요청을 함
.andExpect(status().isOk())
// mvc.perform의 상태 결과 검증 - 상태 200이니?
.andExpect(content().string(hello));
// mvc.perform의 응답 본문내용 결과 검증 - "hello"를 리턴하니?
}
@Test
public void returnHelloDTO() throws Exception{
String name = "hello";
int amount = 1000;
mvc.perform(
get("/hello/dto")
.param("name", name)
.param("amount", String.valueOf(amount)))
// param은 String값만 허용
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
// JSON 응답값을 필드별로 검증할 수 있음, $를 기준으로 필드명 명시
.andExpect(jsonPath("$.amount", is(amount)));
}
}
* @RunWith(SpringRunner.class)
: 테스트 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킴
- 여기선 SpringRunner 스프링 실행자 사용 → 스프링 부트 테스트와 JUnit 사이의 연결자 역할
* @WebMvcTest(controllers = HelloController.class)
: Web에 집중할 수 있는 어노테이션
→ 선언할 경우 @Controller, @ControllerAdvice 등 사용할 수 있음
but, @Service, @Component, @Repository 는 사용 X
* private MockMvc mvc; 의존성 주입
: 웹 API 테스트할 때 사용, 스프링 MVC 테스트의 시작점
→ 이 클래스를 통해 HTTP GET, POST 등에 대한 API 테스트를 할 수 있음
* returnHello() 테스트
: MockMvc를 통해 /hello 주소로 HTTP GET 요청을 하여
mvc.perform의 상태 결과를 검증하고, mvc.perform의 응답 본문 내용 결과를 검증함
→ 성공하면 Tests passed 가 나오며 테스트 끝!
* returnHelloDto() 테스트
: param 값을 보내 데이터 전송이 잘 되는지 확인
주의! ) param은 String 값만 허용함!
jsonPath() : JSON 응답값을 필드별로 검증할 수 있음, '$'를 기준으로 필드명 명시
ex) jsonPath("$.name", is(name))
다음 공부는 이에 이어서 Spring Data Jpa와 관계형 데이터베이스에 대해서
'Spring' 카테고리의 다른 글
[SpringBoot] Spring Data Jpa와 관계형 데이터베이스 (0) | 2024.05.13 |
---|---|
[Spring] WAS가 도대체 뭔데? (1) | 2024.04.11 |
[Spring] WebApplicationInitializer.java & ServletContextListener.java (0) | 2024.03.22 |
[Spring] @Retention (0) | 2024.03.20 |
[SQL] 데이터가 없으면 INSERT, 있으면 UPDATE (같은 데이터 중복 삽입 해결) (1) | 2024.01.24 |