◎ 참고 서적 | Mastering Spring 5
[ 스프링 MVC +부트 스트랩 설정]
1. 메이븐을 이용하여 부트 스트랩 WebJar 추가
위치 : pom.xml
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.6</version>
</dependency>
2. WebJar 정적 콘텐츠 제공을 위한 MVC 리소스 핸들로 구성
위치 : context.xml
<mvc:resources mapping="/webjars/**" location="/webjars/" />
3. 부트 스트랩 사용할 jsp 파일의 스크립트 영역에 아래 스크립트 영역 추가
<script src="webjars/bootstrap/3.3.6/js/bootstrap.min.js">
</script>
<link
href="webjars/bootstrap/3.3.6/css/bootstrap.min.css"
rel="stylesheet">
<<테스트 하기 위한 pom.xml>>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mastering.spring</groupId>
<artifactId>mastering-spring-chapter3-springmvc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.1.3.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 별도 추가임 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<!-- chapter 3 플로우 6 추가 파트 -> 유효성 검사 하이버네이트 밸리데이터 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
</dependency>
<!-- 부트 스트랩 사용을 위한 -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.6</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0.pr3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Unit Test Dependencies 단위테스트 위해서 추가해야할 의존관계-->
<!-- 단위 테스트 중 MockMvc 클래스와 @Before 어노테이션 사용하기 위해 내가 별도로 추가한 코드 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.5.4</version>
<!-- <scope>test</scope> -->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- <scope>test</scope> jnit어노테이션 import 안되어서 주석처리하니깐
해결됨-->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<!-- <scope>test</scope> -->
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<!-- <scope>test</scope> -->
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.0-rc1</version>
<!-- <scope>test</scope> -->
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<verbose>true</verbose>
<source>1.8</source>
<target>1.8</target>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<contextReloadable>true</contextReloadable>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
[단위 테스트]
특정 컨트롤러만 테스트 하는 것
※ https://letsdodev.tistory.com/6 에서 실습한 에제의 MVC 모델을 사용하여 테스트한다.
컨트롤러 단위 테스트를 위해 사용돠눈 프레임워크 : Mock 프레임워크
사용하기 위해 아래 의존 관계를 추가한다 -> pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.1.0.RELEASE</version> <!-- 스프링 부트 버전에 따라 버전을 조정 -->
<scope>test</scope>
</dependency>
- BasicController 에 대한 Test 컨트롤러
package com.mastering.spring.springmvc.controller;
public class BasicControllerTest {
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.standaloneSetup(new BasicController()).builder();
}
@Test
public void basicTest() throws Exception {
this.mockMvc
.perform(
get("/welcome")
.accept(MedialType.parseMediaType("application/html;charset=UTF-8")))
.andExpect(status().isOk())
.andExpect(content().contentType("application/html;charset=UTF-8"))
.andExpect(content().string("Welcome to Spring MVC"));
}
/*
* MockMvc mockMvc.perform : 요섳 실행 호출 허용 결과 인스턴스 반환 -> andExpect
* get (~) : applction/html HTTP get 요청 작성
* andExpect : 예상한 값 확인 값이 맞지 않으면 테스트 실패
* status.isOk() : ResultMatcher 사용 요청 성공(200)인지 확인
* content.contentType(~): 응답 컨텐츠 유형 확인
* content.string(~) : ResultMatcher로 응답 내용에 해당 문자가 포함되어있는지 체크
*/
}
- BasicViewController에 대한 Test 컨트롤러
package com.mastering.spring.springmvc.controller;
public class BasicViewControllerTest {
private MockMvc mockMvc;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.standaloneSetup(
new BasicController()
).setViewResolvers(viewResolver())
.build();
}
private ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver =
new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Test
public void testWelcomeView() throws Exception {
this.mockMvc.perform(
get("/welcome-view")
.accept(MediaType.parseMediaType("application/html;charset=UTF-8"))
.andExpect(view().name("welcome"));
}
}
- BasicModelMap 에 대한 Test 컨트롤러
package com.mastering.spring.springmvc.controller;
public class BasicModelMapControllerTest {
private MockMvc mockMvc;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.standaloneSetup(
new BasicController()
).setViewResolvers(viewResolver())
.build();
}
private ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver =
new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Test
public void testModelMap() throws Exception {
mockMvc.perform(
get("/welcome-model-map")
.accept(MediaType.parseMediaType("application/html;charset=UTF-8")))
.andExpect(model().attribute("name","xyz"))
.andExpect(view().name("welcome-model-map"));
}
}
(단위 테스트의 impot 구문은 추후 업데이트 예정)
[ 어플리케이션 전체(통합) 테스트 ]
BasicTestController에 대한 전체 통합 테스트
package com.mastering.spring.springmvc.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
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.status;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@WebMvcTest(controllers = BasicController.class)
@RunWith(SpringRunner.class)
@WebAppConfiguration
@ContextConfiguration("file:src/main/web/webapp/WEB-INF/user-web-context.xml")
public class BasicControllerSpringConfigurationIT{
@Autowired
private MockMvc mvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setup()
{
this.mvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void basicTest() throws Exception{
this.mvc.perform(get("/welcome.action")
.accept(MediaType.parseMediaType("application.html;charset=UTF-8")))
.andExpect(status().isOk())
.andExpect(content().string("Welcome to Spring MVC"));
}
}
BasicContoller 의 이벤트 url을 실행시켜 확인해보면 된다.
'spring framework' 카테고리의 다른 글
@1 spring framework 핵심 - IOC & bean (0) | 2023.11.03 |
---|---|
SpringMVC - #파일 업로드, 다운로드 (메이븐 이용) (0) | 2023.09.21 |
스프링 프레임워크 #6 - 모델, 세션, 예외처리 (0) | 2023.09.18 |
스프링 프레임워크 #5 Spring MVC 핵심 개념 (RequestMapping, 뷰 리졸버, 핸들러, 인터셉터) (0) | 2023.09.17 |
★스프링 프레임워크 #4 - Chapter03 : Spring MVC 실습, 유효성 검사, 예외 처리, 정규식 등 (0) | 2023.09.14 |