Junit for JiraRestClient创建问题

Junit for JiraRestClient创建问题,junit,mockito,junit4,Junit,Mockito,Junit4,我正试图为下面的方法编写一个JUnit测试,该方法创建了一个新的Jira问题,是否有人知道如何模拟JiraRestClient,或者是否有其他方法为此编写测试 我的代码是 公共问题createNewIssueBasicProject项目,BasicUser受让人,BasicIssueType issueType,字符串摘要,字符串说明,字符串parentKey,文件附件 { 尝试 { IssueInputBuilder issueBuilder=新的IssueInputBuilder项目,iss

我正试图为下面的方法编写一个JUnit测试,该方法创建了一个新的Jira问题,是否有人知道如何模拟JiraRestClient,或者是否有其他方法为此编写测试

我的代码是

公共问题createNewIssueBasicProject项目,BasicUser受让人,BasicIssueType issueType,字符串摘要,字符串说明,字符串parentKey,文件附件 { 尝试 { IssueInputBuilder issueBuilder=新的IssueInputBuilder项目,issueType; issueBuilder.setDescriptiondescription; issueBuilder.setsummary摘要; issueBuilder.setProjectKeyproject.getKey; issueBuilder.setIssueTypeissueType; issueBuilder.setAssigneeassignee; ifparentKey!=null { Map parent=新的HashMap; parent.putkey,parentKey; FieldInput parentField=新的FieldInputparent,新的复杂性InputFieldValueParent; issueBuilder.setFieldInputparentField; } IssueInput IssueInput=issueBuilder.build; IssueRestClient issueClient=getJiraRestClient.getIssueClient; BasicIssue newBasicIssue=issueClient.createIssueissueInput,pm; Issue newIssue=issueClient.getissuenewbasissue.getKey,pm; ifattachment!=null&&newIssue!=null issueClient.addAttachmentspm,newIssue.getAttachmentsUri,附件; 返回新版本; } 捕获RestClientException e { LOGGER.debugError在为输入参数项目创建新Jira问题时出错:+project!=null?project.getName:null+受让人:+assignment!=null?受让人.getName:null +issueType:+issueType!=null?issueType.getName:null+摘要:+摘要+说明:+说明; 返回null; } } 更新

我考虑的一件事是传递一个参数,该参数将决定该方法是否从测试运行,但随后它将干扰我不想要的API。但是要写一个测试,我必须避开这个呼叫

BasicIssue newBasicIssue=issueClient.createIssueissueInput,pm

如何做到这一点?

在代码中,您有一个getJiraRestClient方法。如果您还有一个setJiraRestClientJiraRestClient客户机方法,那么可以从测试类中调用该方法,并将其设置为模拟客户机

在Mockito中,您可以按如下方式初始化模拟客户端:

JiraRestClient mockClient=org.mockito.mockito.mockJiraRestClient.class; 当然,这是假设您的jirarest客户机位于一个名为JiraRestClient的类中。但是,您可以设置mock,以便在调用其getIssueClient时返回模拟的IssueRestClient,等等。因此,如下所示:

IssueRestClient mockIssueClient=org.mockito.mockito.mockIssueRestClient.class; org.mockito.mockito.whenmockClient.getIssueClient.thenReturnmockIssueClient; 等等

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

Inject.fieldfield.of target.with value;
如果您使用的是Spring,那么您可以为单元测试创建一个不同的上下文文件,并让Spring注入一个模拟bean,而不是真正的JiraRestClient bean。

好的。因为我没有直接使用jiraopenapi。取而代之的是,我一直在自动化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)));
    }
我模拟了泛型类中的以下数据成员:

可变附件 方法getAttachments 在这里,你真的不需要模仿JIRA客户机。相反,若您并没有修改方法的核心业务逻辑/目的,那个么您可以模拟该方法