springboot單元測試繼承優化
阿新 • • 發佈:2018-12-12
基於之前的springboot單元測試,使用繼承,減少不必要的重複操作。 父類測試類,有springboot預設建立,我們做一些修改。
@WebAppConfiguration//用來宣告載入的類是一個WebApplicationContext @RunWith(SpringRunner.class) @SpringBootTest @MapperScan("springboot.demo.dao")//掃描dao層 public class DemoApplicationTests { protected MockMvc mockMvc; @Autowired private WebApplicationContext wac; @Before public void setup() { mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); }//這個方法在每個方法執行之前都會執行一遍 }
Dao層測試
相比之前簡化很多,只需要專注與測試就好了。
public class DaoExtendsTest extends DemoApplicationTests {
@Autowired
private UserDao userDao;
@Test
public void daoTest(){
User user = userDao.queryUserByName("haha");
System.out.println(user);
}
// User(name=haha, age=15)
}
Service層測試
public class ServiceExtendsTest extends DemoApplicationTests {
@Autowired
private UserService userService;
@Test
public void serviceTest(){
User user = userService.queryUserByName("haha");
System.out.println(user);
}
//User(name=haha, age=15)
}
Controller層測試
** mockMvc在父類已經完成初始化** 這裡的super.mockMvc要寫到@Test方法裡面。因為初始化是在@Before中完成的,如果定義在成員變數則mockMvc其實在父類沒有完成初始化為null,然後報空指標異常。
public class ControllerExtendsTest extends DemoApplicationTests{
@Test
public void controllerTest() throws Exception {
String result = super.mockMvc.perform(
MockMvcRequestBuilders.post("http://127.0.0.1:8080/user/queryUser/haha")//請求的url,請求的方法是post
)
.andExpect(status().isOk())//返回的狀態是200
.andDo(print())//打印出請求和相應的內容
.andReturn().getResponse().getContentAsString();//將相應的資料轉換為字串
System.out.println(result);
}
}