เรามาดูกัน
1. Config POM
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
โดยมันจะดึง Library Spring Test, JUnit, Hamcrest, Mockito มาให้เลยครับ2. ถาจะทำเทสจะต้องมี embedded server มาด้วยนะครับ เพราะถ้าเขียนลง Server จะ exclude ออก ถ้าจะเทสจะเอาเข้ามาแล้วใช้ Scope = test เอาครับ แบบนี้
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3. มาดู Class Test
package tutorialspring4.controllers;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockServletContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import tutorial.spring4.controllers.HelloController;
import tutorial.spring4.forms.HelloForm;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@WebAppConfiguration
public class HelloControllerTest {
private MockMvc mvc;
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void getHello() throws Exception {
HelloForm form = new HelloForm();
form.setSay("Hi");
form.setName("Hello");
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(jsonPath("$.say", is(form.getSay()))).andExpect(jsonPath("$.name", is(form.getName())));
}
}
- RunWith = SpringJUnit4ClassRunner บอก JUnit ว่าจะใช้ Spring Test- SpringApplicationConfiguration = MockServletContext บอก Spring ว่าจะใช้ Mock ส่วนของ servlet
- MockMvc จะ Mock ส่วนของ Controller เพื่อเทส จะเห็นว่าตอน SetUp จะมีการ Build อยู่
- ส่วนเทสจะเห็นว่าเทสไปที่ Path เลยไม่ได้เทส จาก Controller ทำให้เทส route ว่าถูกไหม ทำงานโอเคไหมครับ
References
Basic
1. Spring Boot ตอนที่ 1 มาทำความรู้จักกับ Spring Boot
2. Spring Boot ตอนที่ 2 Hello World
3. Spring Boot ตอนที่ 3 โครงสร้างของ Project
4. Spring Boot ตอนที่ 4 Spring Boot กับ Thymeleaf
5.Spring Boot ตอนที่ 5 Spring Boot กับ Database [แบบ Embeded]
6.Spring Boot ตอนที่ 6 กับ Production Database
7.Spring Boot ตอนที่ 7 Security
8.Spring Boot ตอนที่ 8 Testing
0 comments:
แสดงความคิดเห็น