1. 程式人生 > >springboot單元測試繼承優化

springboot單元測試繼承優化

基於之前的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);

    }

}