今天用Mock測試Controller的時候,剛開始發現Controller裏面的Service沒有被實例化,也就是沒有注入bean。
原先的測試代碼,我沒有通過AutoWired註解注入repaymentScheduleController,而是直接在setup裏面new了一個Controller。
正常運行後的代碼:
package com.creditease.microloan.mil.loanrepay;
import com.creditease.microloan.mil.loanrepay.controller.RepaymentScheduleController;
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.SpringRunner;
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.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MicroloanMilLoanRepayApplicationTests {
/* 測試service
@Autowired
private RepaymentCalculateService repaymentCalculateService;
@Test
public void test2(){
List<RepayTermBO> list = repaymentCalculateService.getRepayTerm(50, Timestamp.valueOf("2017-05-22 00:00:00"),1,10);
Assert.assertNotNull(list);
}
@Test
public void test3(){
List<RepayTermBO> list = repaymentCalculateService.getRepayTerm(50, Timestamp.valueOf("2017-05-22 00:00:00"),1,10);
Assert.assertNotNull(list);
}*/
//測試Controller接口
@Autowired
private RepaymentScheduleController repaymentScheduleController;
private MockMvc mockMvc;
@Before
public void setup(){
mockMvc = MockMvcBuilders.standaloneSetup(repaymentScheduleController).build();
}
//驗證controller是否正常響應並打印返回結果
@Test
public void getHello() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/loanrepay/repaymentSchedule/repayTerm").accept(MediaType.APPLICATION_JSON)
.param("dayNum","8")
.param("date","2017-7-18 00:00:00")
.param("pageNum","1")
.param("pageSize","10"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
System.out.println("輸出 " + mvcResult.getResponse().getContentAsString());
}
}