我的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內宣告的方法,我們寫了一個初始化設定的方法,MockMvcmvc去做了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 )