【发布时间】: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