본문 바로가기

JAVA/Spring Boot

스프링 부트 테스트

반응형

스프링 부트 테스트

spring init --package=com.apress.spring -g=com.apress.spring -a=spring-boot -name=spring-boot -x


pom.xml

<modelVersion>4.0.0</modelVersion>


<groupId>com.apress.spring</groupId>

<artifactId>spring-boot</artifactId>

<version>0.0.1-SNAPSHOT</version>

<package>jar</package>


<name>spring-boot</name>

<description>Demo project for Spring Boot</description>


<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.3.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>


<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>

</properties>


<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starer-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>


<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>



spring-boot-starter-test는 스프링 이니셜라이저로 프로젝트를 생성할 때마다 항상 곁들여지는 스타터 폼으로, spring-test, junit, hamcrest, objenesis, mockito jar파일도 함께 가져온다.

스파크 같은 다른 테스트 프레임워크를 써도 된다.


스프링 이니셜라이저는 기본 테스트 클래스를 만든다.

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(classes = SpringBootApplication.class)

public class SrpingBootApplicationTests {

@Test

public void contextLoads() {

}

}


@RunWith(SpringJUnit4ClassRunner.class)

제이유닛 라이브러리의 @RunWith는 제이유닛 내장 실행기 runner 대신 SpringJUnit4ClassRunner.class 클래스를 참조하여 테스트를 실행한다.

이 클래스는 제이유닛의 BlockJUnit4ClassRunner를 커스텀 확장한 클래스로, 스프링 테스트 컨텍스트 프레임워크의 모든 기능을 제공하며 다음 애노테이션을 지원한다.

@Test(expected=...)

@Test(timeout=...)

@Timed

@Repeat

@Ignore

@ProfileValueSourceConfiguration

@IfProfileValue


SpringClassRule, SpringMethodRule 클래스를 써도 된다.

둘다 TestContext 프레임워크에서 클래스 레벨의 기능을 지원하는 TestRule의 커스텀 인터페이스고 @ClassRule과 @Rule 애노테이션을 함게 사용한다.


@SpringApplicationConfiguration(classes=SpringBootApplication.class)

ApplicationContext를 로딩/구성하는 방법을 정하는 클래스 레벨 애노테이션이다.

덕분에 @Autowired 애노테이션만 붙이면 모든 스프링 컨테이너 클래스에 직접 접근할 수 있다.

여기서는 메인 클래스 SpringBootApplication이 모든 연결 공사를 관장한다.


@Test

테스트할 메소드에 붙이는 애노테이션으로 여러 메소드에 붙여도 된다.

하지만 여러 메소드에 붙일경우 실행 순서가 보장되지 않는다.

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 같은 애노테이션으로 순서를 지정한다.


스프링 부트 1.4버전부터 테스트 애노테이션이 단순하게 바뀌었다.

@RunWith(SpringRunner.class)

@SpringBootTest

public class SpringBootApplicationTests {

@Test

public void contextLoads() {


}

}


SpringRunner

SpringJUnit4ClassRunner를 상속한 클래스로 사실상 클래스 이름만 짧게 줄인 동일한 클래스이다.


@SpringBootTest

일반적인 스프링 부트 기반의 테스트 클래스에 붙이는 새 꼬리표(애노테이션)이다.

속성을 추가해서 애플리케이션에 따라 설정을 달리할 수 있다.


웹애플리케이션은 보통 @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)같이 webEnvironment속성으로 웹 환경 (web environment)을 모킹(mocking)하여 테스트를 수행한다.


웹테스트

서드파티 라이브러리를 이용해서 테스트 할 웹 애플리케이션 프로젝트를 생성

mkdir spring-boot-web

cd spring-boot-web

spring init -d=web,thymeleaf --package=com.apress.spring -g=com.apress.spring -a=spring-boot-web -name=spring-boot-web -x


-d=web,thymeleaf 파라미터를 추가

뷰엔진으로 타임리프를 사용하는 웹 프로젝트가 생성된다.


pom.xml

<modelVersion>4.0.0</modelVersion>


<groupId>com.apress.spring</groupId>

<artifactId>spring-boot</artifactId>

<version>0.0.1-SNAPSHOT</version>

<package>jar</package>


<name>spring-boot-web</name>

<description>Demo project for Spring Boot</description>


<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.3.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>


<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>

</properties>


<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-thymeleaf</artifactId>

</dependency>


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starer-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>


<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>


spring-boot-starter-web, spring-boot-start-thymeleaf 두 의존체가 생겼다.

자동생성된 테스트 클래스


@RunWith(SpringJUint4ClassRunner.class)

@SpringApplicatioinConfiguration(Classes = SpringBootWebApplication.class)

@WebAppConfiguration

public class SpringBootWebApplicationTests {

@Test

public void contextLoads(){


}

}


웹 애플리케이션 프로젝트라서 @WebAppConfiguration이라는 애노테이션이 테스트 클래스에 달려있다.

@WebAppConfiguratioin은 org.springframework.web.context.WebApplicationContext 구현체를 불러오는 클래스 레벨 애노테이션으로, 웹 애플리케이션과 관련된 파일이나 빈 모두 접근할 수 있다.



반응형

'JAVA > Spring Boot' 카테고리의 다른 글

Spring Data JPA  (0) 2018.04.02
스프링 부트 데이터 액세스  (0) 2018.02.12
스프링부트에서 스프링  (0) 2018.02.09
스프링과 스프링 부트 비교  (0) 2018.02.08
스프링 부트 작동원리  (0) 2018.02.06