SpringBoot中mock測試controller無法注入service服務

前言: 其實,可以理解爲我是佔位的,嘿嘿。 話說還是關於校驗器, 當時寫完校驗器後,就想立馬測試一番,呃,由於各種原因吧,沒辦法從頁面進入測試,而且也怪麻煩的。當然了, 本寶更不想用postMan, 嗯,就想折騰!

一、最開始的代碼

@WebMvcTest(BabyInsuranceController.class)
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MockServletContext.class})
@WebAppConfiguration
@Import(WebSecurityConfig.class)
public class BabyInsuranceControllerTest {

    @Autowired
    private MockMvc mockMvc;


    @InjectMocks
    private BabyInsuranceController babyInsuranceController;


    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.standaloneSetup(babyInsuranceController).build();
    }

    @Test
    public void informationAdd() throws Exception {

        BabyProposalFacadeDTO babyProposalFacadeDTO = new BabyProposalFacadeDTO();
        RequestBuilder requestBuilder = post(
                BabyInsuranceUrlConstants.BABYINSURANCE + BabyInsuranceUrlConstants.INFORMATION_ADD)
                .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
                .requestAttr("name", "測試用戶");
        this.mockMvc.perform(requestBuilder).andExpect(status().isOk());

    }
}

在寫完校驗器後,我稍加改造,校驗了基本的數據問題, 但有一個校驗點是重複校驗,這個需要調用服務查詢數據庫內容, 本寶連續測了兩把都沒成, 一直報NullPoint這種錯。 我一直以爲是我輸入的校驗值漏掉了啥, 但轉眼一想,我靠, 我就算漏掉了,根據我的處理,也應該是給出個具體的錯誤提示信息,而不是直接空指針。 後來難能好心情,跟了把代碼,發現是服務注入的時候,沒成功, 是個沒有對象的野指針。 然後就無語了, 本來領導說他去調調這個mock測試的事兒, 誰成想,我就改了個註解,就好了:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MFacadeApp.class)
@WebAppConfiguration
public class BabyInsuranceControllerTest {

    private MockMvc mockMvc;

    @Autowired
    private BabyInsuranceController babyInsuranceController;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.standaloneSetup(babyInsuranceController).build();
    }

    @Test
    public void informationAdd() throws Exception {

        BabyProposalFacadeDTO babyProposalFacadeDTO = new BabyProposalFacadeDTO();
        babyProposalFacadeDTO.setRateId("1");
        babyProposalFacadeDTO.setStartDate("2017-12-12");
        BabyProposalHolderPersonFacadeDTO holder=new BabyProposalHolderPersonFacadeDTO();
        holder.setTel("15123423407");
        holder.setName("sdfk");
        holder.setCertType(1);
        holder.setCertNo("130103200001014034");
        holder.setEmail("[email protected]");
        holder.setSex(1);
        babyProposalFacadeDTO.setProposalHolderPerson(holder);

        List<BabyProposalSubjectPersonMasterFacadeDTO> subjects= Lists.newArrayList();
        BabyProposalSubjectPersonMasterFacadeDTO subject=new BabyProposalSubjectPersonMasterFacadeDTO();
        subject.setName("AngelinaTest");
        subject.setCertNo("513029199209285883");
        subject.setCertType(1);
        subjects.add(subject);
        babyProposalFacadeDTO.setProposalSubjectPersonMasters(subjects);
        babyProposalFacadeDTO.setSellChannelCode("12314");
        MvcResult result = mockMvc.perform(post(
                BabyInsuranceUrlConstants.BABYINSURANCE + BabyInsuranceUrlConstants.BABY_INFORMATION_ADD)
                .contentType(MediaType.APPLICATION_JSON).content(JSONObject.toJSONString(babyProposalFacadeDTO)))
                .andExpect(status().isOk()).andReturn();

            System.out.println(result.getResponse().getContentAsString());
    }

}

諾,這樣就好了。 spring boot有用於測試的註解好不勒!

二、個人總結

腫麼辦, 總感覺我變懶了。  爬蟲代碼寫了,也不想總結。 說好了要總結橋接模式,類圖畫了,就不想貼博客寫文字。我就是個懶貨, 微服務的錄音也停了好久了, 獎勵我自己一頓好吃的,然後從新做人得了!

不過, 短暫的頹廢和墮落是可以咬咬牙原諒自己的,但要一直這樣是不行滴。 下個月考試計算機網絡原理, 我還沒有看書。 呃,接下來的博客,可能會暫時貼看書筆記了。  大家爲我祈禱啊,這次要考過哦!——加油

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章