我的Spring Boot為2.0.0.BUILD-SNAPSHOT,網路上相關的資料大多是1.5的版本,在配置上有些的@宣告可能會稍微有點不太一樣,那這篇是要來介紹相關的配置載入要如何撰寫
1.測試類的宣告
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Tutorial2Application.class)
@WebAppConfiguration
1.RunWith
: 要用org.springframework.test.context.junit4.SpringJUnit4ClassRunner
的類來做為運行我們的類
2.SpringBootTest(classes = ? )
: ?後為你的main class的主類名稱
3.WebAppConfiguration
: WebAppConfiguration
如果你要使用Web的環境來做測試模擬這是要加上去的,1.5的版本會是
ex:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
...省略
@Autowired
private WebApplicationContext webApplicationContext;
而我的是:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Tutorial2Application.class)
@WebAppConfiguration
...省略
@Autowired
private WebApplicationContext webApplicationContext;
只差在說我們要設定
@WebAppConfiguration
否則他無法去做Web的環境測試
接下來我們要創建一個MockMvc
類別物件,你可以在@WebAppConfiguration
下加上@Transactional
註解,當每次執行完測試會再將數據roll back!!
MockMvc mvc; //創建MockMvc類的物件
我們還沒有對mvc做初始化直接使用會發生錯誤,利用@Befor在做測試之前,會先執行
@Before
內宣告的方法,我們寫了一個初始化設定的方法,MockMvc
mvc去做了webApplicationContext
的初始化建立
@Before
public void setup(){
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
這個入口跟我們的Java application的入口main函式是一樣的概念,這個要做的主要方法,只是我們可以先對這個類做@Before內的宣告方式初始化
@Test
public void contextLoads() throws Exception {
String uri = "/memberApi/1";
MvcResult result = mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
int status = result.getResponse().getStatus();
System.out.println(status);
Assert.assertEquals("錯誤",200,status);
}
throws Exception
:如果加上try catch錯誤訊息就會消失了,發生例外做throws
例外
uri
: 我設定一個字串去存取我要測試的REST入口方法,這邊以Get
方法做測試
perform(request)
:此方法為要做一個請求的建立,這是一個模擬請求的方式
get(url)
: 要去request
(請求)的連結
accept
: 接受何種格式回傳 我用MediaType.APPLICATION_JSON
接受以JSON
格式回傳
andReturn
方法 :將結果轉換成MockMvc的型態
status
: 回傳狀態的變數
MvcResult getResponse().getStatus()
: 取回回傳狀態
Assert
(斷言測試)
assertEquals("string",200(statusCode),status)
第一個參數:當發生錯誤時要產生的提示文字
第二個參數: 當返回值非第二個參數的數值時觸發
第三個參數: 返回參數
└── src
└── main
└── java
└── com.tutorial
└──com.tutorial.Controller
└──MemberApiController.java
└──com.tutorial.Model
└──Memberaccount.java
└──com.tutorial.Dao
└──MemberApiRepository.java
package com.example.demo;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
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.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tutorial.Tutorial2Application;
import com.tutorial.Dao.MemberApiRepository;
import com.tutorial.Model.Memberaccount;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Tutorial2Application.class)
@WebAppConfiguration
public class Tutorial2ApplicationTests {
@Autowired
private MemberApiRepository memberApiRepository; //加入MemberRepository
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
ObjectMapper objectMapper;
MockMvc mvc; //創建MockMvc類的物件
Memberaccount memberaccount ;
@Before
public void setup(){
memberaccount = new Memberaccount();
memberaccount.setCellphone("02135121");
memberaccount.setEmail("qewq@qwe.asd.s");
memberaccount.setPassword("qweqqq");
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void contextLoads() throws Exception {
String uri = "/memberApi/1";
try{
MvcResult result = mvc.perform(MockMvcRequestBuilders.post(uri).content(objectMapper.writeValueAsString(memberaccount)).accept(MediaType.APPLICATION_JSON)).andReturn();
int status = result.getResponse().getStatus();
Assert.assertEquals("錯誤",200,status);
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
1.要將物件轉成JSON可以@Autowired ObjectMapper
,利用ObjectMapper
來做轉換
2.MockMvcRequestBuilders.(get,post,put,delete)
要記住我們的@RestController
設定的Method只接受何種請求,不然你會一直失敗
1.(http://blog.csdn.net/congge_1993/article/details/78541182 )