SpringBoot中mock测试controller无法注入service服务

版权声明:每天进步一点点——我也只是写着玩儿——随便转随便评 https://blog.csdn.net/u013034889/article/details/79560938

前言: 其实,可以理解为我是占位的,嘿嘿。 话说还是关于校验器, 当时写完校验器后,就想立马测试一番,呃,由于各种原因吧,没办法从页面进入测试,而且也怪麻烦的。当然了, 本宝更不想用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有用于测试的注解好不勒!

二、个人总结

肿么办, 总感觉我变懒了。  爬虫代码写了,也不想总结。 说好了要总结桥接模式,类图画了,就不想贴博客写文字。我就是个懒货, 微服务的录音也停了好久了, 奖励我自己一顿好吃的,然后从新做人得了!

不过, 短暂的颓废和堕落是可以咬咬牙原谅自己的,但要一直这样是不行滴。 下个月考试计算机网络原理, 我还没有看书。 呃,接下来的博客,可能会暂时贴看书笔记了。  大家为我祈祷啊,这次要考过哦!——加油

猜你喜欢

转载自blog.csdn.net/u013034889/article/details/79560938