2.1 테스트 코드란?
2.2 Hello Controller 테스트 코드 작성법
★ 빌드 전에 꼭 해주기
- 위쪽 메뉴에서
파일을 찾는다. 파일→설정→빌드, 실행, 배포→빌드 도구→Gradle- Gradle 프로젝트 밑에
- 빌드 및 실행 찾기
- 다음을 사용하여 빌드 및 실행 : Intellij IDEA로 바꿔주기
- 다음을 사용하여 빌드 및 실행 : Intellij IDEA로 바꿔주기
안 하면 실행/디버그 시 다음과 같은 오류가 뜬다.
No tests found for given includes:
[org.example.web.HelloControllerTest](--tests filter)
HelloController 코드
java
// 2.2장
@RestController
public class HelloController {
@GetMapping("/hello")
public String Hello() {
return "hello";
}
}
2.3 롬북 소개 및 설치하기
★ lombok 깔아주기
없으면 스프링부트 플러그인에 들어가 깔아야 한다.
★ build.gradle에 코드 추가
build.gradle에 ‘org.projectlombok: lombok’을 추가해준다.
java
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
}
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'
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
// 1장
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
// 2.3장 롬북
implementation('org.projectlombok:lombok')
}
test {
useJUnitPlatform()
}
깔고 나서 새로고침 버튼을 누른다.
2.4 Hello controller 코드를 롬북으로!
dto 패키지
-
web 패키지 안에 dto 패키지를 만들어 준다.
-
HelloResponseDto 라는 자바 클래스를 만든다.
-
HelloReponseDtoTest를 test에 만들어준다.
코드
javapackage org.example.web.dto; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; // 2.4장 public class HelloResponseDtoTest { @Test public void lombok_function_test() { //given String name = "test"; int amount = 1000; //when HelloResponseDto dto = new HelloResponseDto(name, amount); //then assertThat(dto.getName()).isEqualTo(name); assertThat(dto.getAmount()).isEqualTo(amount); } }- assertj :
- 추가적인 라이브러리가 필요 없음
- 자동완성이 확실하게 지원됨
- assertj :
★ 오류 출력 시
다음과 같은 오류가 날 경우:
java
java: variable name not initialized in the default constructor
- build.gradle 수정이 필요하다.
java
dependencies {
// 1장
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
// 2.3장 롬북
// 2.4장
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.projectlombok:lombok'
}
enable annotation …설정이 뜰 경우enable을 눌러준다.
HelloController에 코드 추가
java
// 2.2장
@RestController
public class HelloController {
@GetMapping("/hello")
public String Hello() {
return "hello";
}
// 2.4장 롬북
@GetMapping("/hello/dto")
public HelloResponseDto helloDto (@RequestParam("name") String name, @RequestParam("amount") int amount) {
return new HelloResponseDto(name, amount);
}
}
HelloControllerTest에 코드 추가
java
// 2.4장에서 추가
import static org.hamcrest.Matchers.is; // 직접추가
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; // 직접추가
java
// 2.2장
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void return_hello() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
// 2.4장
@Test
public void return_helloDto() 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))
);
}
}