当前位置: 首页 > 知识库问答 >
问题:

Junit for Controller类

贲文景
2023-03-14

我有控制器方法,为此我正在创建Junit,但在调用服务方法时出现Null指针错误。我使用了电源模拟,但仍然得到Null指针。

方法:

                 @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私有DataSourceReportController dataSourceReportController;

@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“);”

共有2个答案

海信鸥
2023-03-14

谢谢@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);

}
田化
2023-03-14

你需要在测试课上有这个

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

打电话之前

ctrl.displayDataSourceReportPage(request, model);
 类似资料:
  • 本文向大家介绍请说说你熟悉的三个垂直社区或金融类 APP,并简述其典型用户画像。相关面试题,主要包含被问及请说说你熟悉的三个垂直社区或金融类 APP,并简述其典型用户画像。时的应答技巧和注意事项,需要的朋友参考一下 掌上生活、浦大喜奔、买单吧 金融类app用户首先是持有银行卡和智能手机的消费能力中上的人群。其次,因为金融类app多数被用于生活消费、查询账单、理财等功能,可以将其画像定义为:对理财和

  • 问题内容: 我是一个初学者,正在学习spring和hibernate(在项目中使用Maven),遇到了这个问题,被困在这里。试图找到解决方案,但最终无处可寻。请帮忙。非常感谢 错误:“找不到“http://java.sun.com/jsp/jstl/core ”的标记库描述符 码: 尝试了在Java构建路径中找不到超类“javax.servlet.http.HttpServlet”中给出的解决方案

  • 问题内容: 我在jsp页面中看到以下错误- 我看到了一篇关于此的文章,并尝试了一些建议的方法。BalusC提供了很好的输入- JSTL1.2和Standard.jar不能一起使用。我做到了,它解决了一段时间的问题- 但它再次出现。我不确定是否还有jar碰撞。我已经将所有jar定义为Maven中的依赖项。以下是我指定的依赖项pom.xml- 问题答案: 您将需要在项目中导入JSP API,而Serv

  • 问题内容: 我是使用库的新手,但是我需要能够向忘记密码的用户发送电子邮件。我正在尝试使用JavaMail和Apache Commons Email来实现这一点。但是,我认为我一定是错误地导入了库。 当我尝试发送电子邮件时,收到以下消息: 编码: 堆栈跟踪: 我已经尝试了几件事: 将包含所有.java文件的org.apache.commons.mail文件夹复制到我的netbeans项目的源文件中,

  • 问题内容: 您能否澄清一下,为什么在我们将 final 关键字设为不变时,为什么 在上课之前需要 final 关键字。我的意思是,如果我们将所有属性声明为私有和最终的,那么它也是一个不可变的类,不是吗? 很抱歉,这个问题似乎很简单,但是我对此感到非常困惑。帮帮我。 编辑:我知道一个声明为final的类不能被子类化。但是如果每个属性都是私有和final的,那有什么区别呢? 问题答案: 正如堆纸器所说

  • 问题内容: 我有一个蚀项目结构看起来像这样: 所有这些项目都是Maven项目。项目B是Eclipse WTP项目,包含项目A作为依赖项。我正在使用m2eclipse插件。 当我将项目B部署到Tomcat(全部从Eclipse中进行)时,总是会抛出错误,提示它无法从项目A中找到类。解决此问题的唯一方法是在Eclipse中 关闭 项目A并执行 mvn install 命令,因此,在这一点上,项目A就像

  • 问题内容: 假设我有一个包含许多公共方法的类: 现在,我想创建一个 包装器 类,该 包装器 类将所有方法委托给包装好的实例( 委托 ): 现在,如果MyClass有很多方法,我将需要重写它们中的每一个,这些方法或多或少与只是“委托”的代码相同。我想知道是否可以做一些魔术来自动调用Java中的方法(因此Wrapper类需要说“嘿,如果您对我调用方法,只需去 委托 对象并对其调用此方法)。 顺便说一句

  • 问题内容: 我的应用程序显示了许多自定义对话框,例如“是/否”或“接受/取消决定”,并且在编写代码时,我意识到遵循相同的模式重复了太多代码。 我想建立一个通用类,但我不知道该怎么做,或更确切地说,我不知道该怎么做(接口,抽象类,继承,静态类等)。 这是我目前的课程: } 这就是我需要使用此类时要做的事情: 我敢肯定它是可改进的,但是您怎么能做到呢? 谢谢 问题答案: 首先创建一个Base 来保持的