기본으로 생성된 build.gradle
plugins {
id 'java'
}
group 'com.book'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testCompile group : 'junit', name : 'junit', version : '4.12'
}
build.gradle 상단에 추가할 코드
buildscript {
ext {
springBootVersion = '2.1.9.RELEASE'
}
//각종 라이브러리들을 어떤 원격 저장소에서 받을지 결정함
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
추가할 라이브러리 코드
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
TDD : 테스트가 주도하는 개발 / 테스트 코드를 먼저 작성하는 것부터 시작
단위테스트 : 순수하게 테스트 코드만 작성하는 것
테스트 코드를 작성하지 않는다면? 코드가 정상적으로 동작하는지 확인하기 위해서 톰캣을 수도없이 올렸다가 내리면서 불필요한 시간을 허비하고, System.out.println()으로 결과를 확인해야만한다.
✔ 테스트 코드를 작성한다면 더이상 불필요한 시간을 허비하지 않으며 눈으로 검증하지 않게 자동검증이 가능하다.
테스트 코드의 작성을 도와주는 프레임워크 : JUnit (Java)
@SpringBootApplication
public class Application {
public static void main(String args[]){
SpringApplication.run(Application.class, args);
}
}
//테스트 코드 예시
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void helloReturn() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
@Test
public void helloDtoReturn() throws Exception{
String name = "hello";
int amount = 1000;
mvc.perform(get("/hello/dto").param("name", name).param("amount", String.valueOf(amount)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name",is(name)))
.andExpect(jsonPath("$.amount",is(amount)));
}
}
@RunWith(SpringRunner.class)
@WebMvcTest
: 스프링 어노테이션중 web에 집중할 수 있는 어노테이션@Autowired
: 스프링이 관리하는 bean을 주입받는다. private MockMvc mvc
: 이 클래스를 통해서 GET, POST등에 대한 웹 API 테스트를 할 수 있음mvc.perform(get("/hello"))
: MockMvc를 통해 /hello 주소로 HTTP GET을 요청andExpect(status().isOk())
: mvc.perform의 결과를 검증(HTTP Header의 상태를 검증), 200인지 아닌지 검증andExpect(content().string(hello))
: 응답 본문의 내용을 검증.param
: API 테스트 할 때 사용될 요청 파라미터 설정, 값은 String만 허용되므로 숫자/날짜 데이터도 문자열로 변경해야지 사용가능하다.jsonPath
: json응답값을 필드별로 검증할 수 있는 메소드, $를 기준으로 필드명을 명시한다.롬복(Lombok) : 자바 개발할 때 자주 사용하는 코드 Getter, Setter, 기본 생성자, toString을 어노테이션으로 자동 생성해줌
build.gradle에 아래코드 추가
compile('org.projectlombok:lombok')
추가 후 새로고침 버튼을 눌러서 라이브러리를 내려받는다.
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
@Getter
: 선언된 모든 필드의 get 메소드를 생성@RequiredArgsConstructor
: 선언된 모든 final 필드가 포함된 생성자를 생성, final이 없는 필드는 생성자에 포함되지 않음//적용된 롬복이 잘 동작하는지 테스트하는 코드
public class HelloResponseDtoTest {
@Test
public void lombokTest(){
String name = "test";
int amount = 1000;
HelloResponseDto dto = new HelloResponseDto(name, amount);
assertThat(dto.getName()).isEqualTo(name);
assertThat(dto.getAmount()).isEqualTo(amount);
}
}
assertThat
: assertj(테스트 검증 라이브러리)의 검증 메소드.isEqualTo
: assertj의 동등 비교 메소드, 값을 비교해서 같을때만 성공