Junit for JiraRestClient create Issue



我正在尝试为以下方法编写一个 JUnit 测试,该方法创建了一个新的 Jira 问题,有谁知道如何模拟JiraRestClient或者有没有其他方法可以为此编写测试

我的代码是

public Issue createNewIssue(BasicProject project, BasicUser assignee, BasicIssueType issueType, String summary, String description, String parentKey, File attachment)
 {
    try
    {
      IssueInputBuilder issueBuilder = new IssueInputBuilder(project, issueType);
      issueBuilder.setDescription(description);
      issueBuilder.setSummary(summary);
      issueBuilder.setProjectKey(project.getKey());
      issueBuilder.setIssueType(issueType);
      issueBuilder.setAssignee(assignee);
      if(parentKey != null)
      {
        Map<String, Object> parent = new HashMap<String, Object>();
        parent.put("key", parentKey);
        FieldInput parentField = new FieldInput("parent", new ComplexIssueInputFieldValue(parent));
        issueBuilder.setFieldInput(parentField);
      }
      IssueInput issueInput  = issueBuilder.build();
      IssueRestClient issueClient = getJiraRestClient().getIssueClient();
      BasicIssue newBasicIssue = issueClient.createIssue(issueInput, pm);
      Issue newIssue = issueClient.getIssue(newBasicIssue.getKey(), pm);
      if(attachment != null && newIssue != null)
        issueClient.addAttachments(pm, newIssue.getAttachmentsUri(), attachment); 
      return newIssue;
    } 
    catch (RestClientException e)
    {
      LOGGER.debug("Error while creating new Jira issue for input paramenters project : " + (project != null ? project.getName() : null) + " assignee : " +(assignee != null ? assignee.getName() : null)
          + " issueType : " + (issueType != null ? issueType.getName() : null) + " summary : " + summary + " description : " + description);
      return null;
    }
  }

更新

我正在考虑的一件事是传递一个参数,该参数将决定方法是否从测试中运行,但随后它会干扰我不想要的 API。但是要编写测试,我必须逃离调用

BasicIssue newBasicIssue = issueClient.createIssue(issueInput, pm);

怎么做?

在你的代码中,你有一个getJiraRestClient()的方法。如果您也有setJiraRestClient(JiraRestClient client)方法,则可以从测试类中调用该方法并将其设置为模拟客户端。

在 Mockito 中,您可以像这样初始化您的模拟客户端:

JiraRestClient mockClient = org.mockito.Mockito.mock(JiraRestClient.class);

当然,这是假设您的 Jira ReST 客户端位于一个名为 JiraRestClient 的类中。但是,您可以设置模拟以在调用其getIssueClient()时返回模拟IssueRestClient,等等。所以,像这样:

IssueRestClient mockIssueClient = org.mockito.Mockito.mock(IssueRestClient.class);
org.mockito.Mockito.when(mockClient.getIssueClient()).thenReturn(mockIssueClient);

等等。

如果您没有也不想创建 setJiraRestClient 方法,但将客户端作为类中的一个字段,则可以使用 BeanInject 库将模拟 Bean 注入到类中:

Inject.field("field").of(target).with("value");

如果你使用的是 Spring,你可以为你的单元测试创建一个不同的上下文文件,并让 Spring 注入一个模拟 bean 而不是真正的 JiraRestClient bean。

好的。因为我没有直接使用过JIRA Open API。相反,我使用JIRA客户端来自动执行JIRA相关任务。

为了为 JIRA

编写单元测试,您需要模拟已实现 JIRA 泛型方法的函数。例如,如果您希望获取特定缺陷/工单的附件列表,您的方法如下所示:

public class Generics {
private JiraClient jira;
    @Step("Get added attchments against issue <issueId>")
    public List<Attachment> getAttachments(String issueId) {
        List<Attachment> listOfAttachments = null;
        try {
            Issue issue = jira.getIssue(issueId);
            listOfAttachments = issue.getAttachments();
            LOGGER.info("Current Attachments to " + issueId + " " + listOfAttachments);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return listOfAttachments;
    }
}

等效 JUnit 测试:

public class JiraUnitTests {
    @Mock
    List<Attachment> attachments;
    @Test
    public void testGetAttachment() {
        Generics generics = Mockito.mock(Generics.class);
        Mockito.when(generics.getAttachments(Matchers.any(String.class))).thenReturn(attachments);
        Assert.assertEquals(attachments, generics.getAttachments(Matchers.any(String.class)));
    }

我在下面嘲笑了泛型类的数据成员:

  1. 可变附件
  2. 方法 getAttachments()

在这里,你真的不需要嘲笑JIRA客户端。相反,您可以模拟方法(如果您没有修改该方法的核心业务逻辑/目的)

相关内容

  • 没有找到相关文章

最新更新