控制器类的 Junit



我有控制器方法,为此我正在制作 Junit,但在调用服务方法时出现空指针错误。我使用了功率模拟,但仍然得到空指针。

方法:

                 @RequestMapping(method = RequestMethod.GET, value = "/DSR.do")
public ModelAndView displayDataSourceReportPage(HttpServletRequest request,Model model) {
    log.debug(" Inside displayDataSourceReportPage method ");
    Map<String, Object> map = new HashMap<String, Object>();
    try {
        request.setAttribute(MENU_SELECTED, LABEL_MENU_SOURCEDATA);
        request.setAttribute(SUB_MENU_SELECTED, LABEL_SUBMENU_DSR);


        @SuppressWarnings("rawtypes")
        List dataSource = dataSourceReportService.listDataSourceReportByCurrentRunInd("C");
        map.put("dataSource", dataSource);
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
    return new ModelAndView("DataSourceReport", "model", map);
}

测试方法:

@InjectMocks 私有数据源报表控制器数据源报表控制器;

@Mock
private DataSourceReportService dataSourceReportServiceImpl;

@InjectMocks
private DataSourceReportDAO dataSourceReportDAO = new DataSourceReportDAOImpl();
@Before
public void setup() {
        MockitoAnnotations.initMocks(this);
}
@Test
public void testdisplayDataSourceReportPage() throws Exception {
    PowerMockito.mockStatic(DataSourceReport.class);
    PowerMockito.mockStatic(HttpServletRequest.class);
    PowerMockito.mockStatic(Model.class);
    PowerMockito.mockStatic(DataSourceReportService.class);
    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
    Model model = Mockito.mock(Model.class);
    dataSourceReportServiceImpl = PowerMockito.mock(DataSourceReportService.class);
    DataSourceReport dataSourceReport = PowerMockito.mock(DataSourceReport.class);
    dataSourceReport.setCurrentRunInd("abc");
    dataSourceReport.setActualFileName("Somthing");
    dataSourceReport.setFileCountId(3);
    dataSourceReport.setFileId(4);
    dataSourceReport.setRecCount(3);
    List<DataSourceReport> list = new ArrayList<DataSourceReport>();
    list.add(dataSourceReport);
    String currentRunInd = "currentRunInd";
    Object obj =getClass();

    PowerMockito.when(dataSourceReportDAO.listDataSourceReportByCurrentRunInd(currentRunInd)).thenReturn(list);

    DataSourceReportController ctrl = new DataSourceReportController();
    ctrl.displayDataSourceReportPage(request, model);
}

在"dataSourceReportService.listDataSourceReportByCurrentRunInd("C");"处获取空

你需要在

测试类中有这个

PowerMockito.when(dataSourceReportService.listDataSourceReportByCurrentRunInd("C")).thenReturn(list);

打电话前

ctrl.displayDataSourceReportPage(request, model);
感谢@

Arthur Zagretdinov

我尝试了下面的代码,它有效。

            private MockMvc mockMvc;
    @Mock
    private HttpServletRequest req;
    @Mock
    private DataSourceReportService dataSourceReportServiceImpl;
    @InjectMocks
    private DataSourceReportController controller;
    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }
 @Before
    public void initMocks(){
        MockitoAnnotations.initMocks(this);
    }
@Test
public void testdisplayDataSourceReportPage() throws Exception {
    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
    Model model = Mockito.mock(Model.class);
    DataSourceReport dataSourceReport =Mockito.mock(DataSourceReport.class);;
    dataSourceReport.setCurrentRunInd("abc");
    dataSourceReport.setActualFileName("Somthing");
    dataSourceReport.setFileCountId(3);
    dataSourceReport.setFileId(4);
    dataSourceReport.setRecCount(3);
    List<DataSourceReport> list = new ArrayList<DataSourceReport>();
    list.add(dataSourceReport);
    ModelAndView modelView = controller.displayDataSourceReportPage(request, model);
    modelView.addObject(dataSourceReport);
}

相关内容

  • 没有找到相关文章

最新更新