【问题标题】:Mock test Case for void methodvoid 方法的模拟测试用例
【发布时间】:2021-07-15 07:11:53
【问题描述】:

我想为调用不同方法的 start 方法编写测试用例。 我尝试了这段代码,但它在 spyGit.start(mockUserDetails.getUserInput()) 上给了我 NullPointerException; 提前致谢。

public void start(String jiraNumber) throws Exception {
        InputData.loader();
        GitHubJiraIntegrator gitHubJiraIntegrator = new GitHubJiraIntegrator();
        UserDetails userDetailForGit = new UserDetails(InputData.getPropertyByKey("username"), InputData.getPropertyByKey("password"), InputData.getPropertyByKey("gitRepo"));
        UserDetails userDetailForJira = new UserDetails(InputData.getPropertyByKey("username"), InputData.getPropertyByKey("password"), jiraNumber, "Jira");
        if (!jiraNumber.equals("Invalid")) {
            HttpURLConnection connection = gitHubJiraIntegrator.getConnection(userDetailForJira);
            String status = jiraServices.checkJiraStatus(connection);
            String shaOfMaster = gitHubJiraIntegrator.checkJiraProgressStatus(status, jiraNumber);
            if (!shaOfMaster.equals("not needed") && !shaOfMaster.equals("Not In Progress"))
                gitHubServices.createGitHubBranch(userDetailForGit, jiraNumber, shaOfMaster);
        }
public void test() throws Exception {
        UserDetails mockUserDetails = mock(UserDetails.class);
        HttpURLConnection mockHttp = mock(HttpURLConnection.class);
        GitHubJiraIntegrator gitHubJiraInt = mock(GitHubJiraIntegrator.class);
        JiraServices mockJiraService = mock(JiraServices.class);
        GitHubJiraIntegrator spyGit = spy(GitHubJiraIntegrator.class);
        GitHubServices mockGitHubServices = mock(GitHubServices.class);
        String jiraNumber = "abc";
        InputStream in = new ByteArrayInputStream(jiraNumber.getBytes());
        System.setIn(in);
        mockUserDetails.setUserInput(jiraNumber);
        System.out.println(mockUserDetails.getUserInput());
        doReturn(mockHttp).when(spyGit).getConnection(mockUserDetails);
        doReturn("In Progress").when(mockJiraService).checkJiraStatus(mockHttp);
        doReturn("1234567890").when(gitHubJiraInt).checkJiraProgressStatus("In Progress", "123");
        String shaKey = spyGit.checkJiraProgressStatus("In Progress", "1234");
        doReturn(201).when(mockGitHubServices).createGitHubBranch(any(), eq("123"), eq(shaKey));
        doNothing().when(spyGit).start(anyString());
        spyGit.start(mockUserDetails.getUserInput());
        verify(spyGit, times(1)).start(anyString());
    }

【问题讨论】:

  • 那些是局部变量,不能模拟局部变量。另外,更具体的原因是什么导致异常,方法调用?参数?什么?
  • 异常原因是mockUserDetails.getUserInput() get null。
  • 您使用 mockito 错误,但无论哪种方式,您都无法像这样在实际代码中模拟变量
  • @Stultuske 在启动方法``` if (!jiraNumber.equals("Invalid")) `` jiraNumber 获得空值。
  • 您需要重新构建代码以支持依赖注入,目前代码还很不干净,因此无法测试。 GitHubJiraIntegrator需要注入,类似于InputData

标签: java mockito


【解决方案1】:

我不知道这是否是异常的确切原因,但值得注意。在使用 cal 一些返回数据对象的模拟方法之前,您应该添加一些定义它应该返回的内容。

所以不是

UserDetails mockUserDetails = mock(UserDetails.class);
...
System.out.println(mockUserDetails.getUserInput());

你应该写

UserDetails mockUserDetails = mock(UserDetails.class);
when(mockUserDetails.getUserInput()).thenReturn(someObjectThatShouldByTheMethod);
System.out.println(mockUserDetails.getUserInput());

【讨论】:

  • 现在它没有抛出异常,但它没有给我代码覆盖率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2019-09-23
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多