buildscript{
ext{
//ext : build.gradle에서 사용하는 전역변수를 설정하겠다. spring Boot Version 이라는 전역변수 생성
springBootVersion = '2.1.7.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' //spring부트의 의존성을 관리해주는 플러그인
group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories { //각종 라이브러리들을 어떤 저장소에서 받을지 정함.
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
오류가 떠서 확인해보니
https://okky.kr/article/997902
그래들 버전때문에 그런걸 수 있다고한다.
implementation 으로 compile이라는 단어를 변경
testcompile 은 testimplementation 으로 변경한다.
그랬더니 아주잘됨~
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'
group 'com.jojoldu.book'
version '1.0.4-SNAPSHOT-'+new Date().format("yyyyMMddHHmmss")
sourceCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.projectlombok:lombok')
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-mustache')
implementation('com.h2database:h2')
implementation('org.springframework.boot:spring-boot-starter-oauth2-client')
implementation('org.springframework.session:spring-session-jdbc')
implementation("org.mariadb.jdbc:mariadb-java-client")
testImplementation('org.springframework.boot:spring-boot-starter-test')
testImplementation("org.springframework.security:spring-security-test")
}
취업의 기본인, 테스트코드를 작성해보자.
TDD와 단위테스트는 다른이야기이다.
TDD는 테스트가 주도하는 개발을 이야기한다. 테스트코드를 먼저 작성하는것부터 시작한다.
반면 단위테스트는 TDD의 첫번째 단계인 기능단위의 테스트코드를 작성하는것을 이야기한다.
TDD와 달리 테스트 코드를 꼭 먼저 작성해야하는것 도 아니고, 리팩토링도 포함되지않는다.
순수하게 테스트 코드만 작성하는것을 이야기한다.
WHY?
- 단위테스트는 개발 단계 초기에 문제발견하게 도와줌
- 단위테스트는 개발자가 나중에 코드를 리팩토링하거나, 라이브러리 업그레이드 등에서 기존기능이 올바르게 작동하는지 확인가능
- 기능에대한 불확실성 감소
- 시스템에 대한 실제문서 제공, 단위테스트 자체가 문서로 사용됨
테스트 코드 작성을 도와주는 프레임워크들이 있다.
가장 대중적인 테스트 프레임워크로는 xUnit이 있는데, 이는 개발환경에 따라 Unit테스트를 도와주는 도구라고 생각하면된다.
-JUnit - Java
- DBUnit - DB
CppUnit - C++
NUnit - .net
스프링 부트는 내장 WAS를 사용하는것을 권장하고 있다.
이유는 , 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있기 때문이다.
외장 was를 쓰면, 환경설정을 하나하나 다 해야함.
테스트를 위한 Controller를 만들자.
package springboot.web;
import com.jojoldu.book.springboot.web.HelloController;
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.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.stereotype.Controller;
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.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class) //테스트를 진행할 때 JUnit 에 내장된 실행자 외에 다른 실행자를 실행시킨다.
//여기서는 SpringRunner라는 스프링 실행자를 사용한다. 즉, 스프링 부트 테스트와 JUnit사이에 연결자 역할을 한다.
@WebMvcTest(controllers = HelloController.class)
/*여러 스프링 테스트 어노테이션 중, web에 집중할 수 있는 어노테이션
선언할경우, @Controller,@ControllerAdvice등은 사용가능.
@Service, @Component, @Repository는 사용불가
컨트롤러만 사용하기때문에 선언함.
*/
public class HelloControllerTest{
@Autowired //스프링이 관리하는 빈 주입받음
private MockMvc mvc; //웹 api를 테스트할때 사용함. 스프링 mvc테스트의 시작점, http get,post등에대한 api테스트 가능
@Test
public void hello가_리턴된다() throws Exception{
String hello = "hello";
mvc.perform(get("/hello")) // MockMVC를 통해 /hello주소로 HTTP GET 요청을 한다. 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언가능
.andExpect(status().isOk())// mvc.perform 의 결과를 검증한다. HTTP Header 의 Status 를 검증한다. 200,404,500 등의 상태를 검증한다. 여기선 OK즉 ,200인지 검증
.andExpect(content().string(hello)); // 컨트롤러에서 hello를 리턴하기 때문에 이 값이 맞는지 검증
}
}
테스트가..성공해야하는데,,
No tests found for given includes: [springboot.web.HelloControllerTest.hello��_���ϵȴ�](--tests filter)
으으응.ㅇ..?
오류를 해결해보자 (07-27)
우리가 검증용으로 선언했던 .andExpect(status().isOk()) 와 .andExpect(content().string(hello)) 가 모두 테스트를 통과했음을 의미한다.
'✍2021,2022 > java' 카테고리의 다른 글
객체 지향 개념 (0) | 2022.08.03 |
---|---|
java 강의 (0) | 2022.08.02 |
java 에서의 소켓 프로그래밍[서버] (0) | 2022.06.01 |
java socket 통신 스레드 이해하기 (0) | 2022.06.01 |
학교 객프 수업 필기(1주차) (0) | 2021.09.03 |