如何使用Mockito进行单位测试链方法调用



我正在使用使用JIRA的REST客户端的J2EE项目。该客户端返回JIRA issue对象。Issue类的某些字段是keyselfidsummary等。这里的self字段基本上是URI。
对于http://jira.company.com/rest/api/2.0/issue/12345我有一个用例,必须从上面指定的URI检索主机。

我可以通过issue.getSelf().getHost()这样的事情来做到这一点。
issue.getSelf()返回类型为" URI"的对象,并获得主机,我可以简单地使用URI类提供的getHost()方法,该类别以String格式返回主机URL。

一切正常。我在使用Mockito的单位测试该代码时面临问题。我不知道如何模拟链接方法。

我有以下代码段。

private static final String JIRA_HOST = "jira.company.com";
@Mock private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;
@Before
    public void setup() {
        when(mockIssue.getSelf().getHost()).thenReturn(JIRA_HOST);
    }

在这里,我得到了Null Pointer Exception

做了很多研究后,我知道我必须使用@Mock(answer = Answers.RETURNS_DEEP_STUBS) private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;
但这也给了我Null Pointer Exception

有人可以告诉我如何模拟链接方法。

您不需要RETURNS_DEEP_STUBS或任何模拟注释。您只需要模拟要在链条中返回的每个对象,与此类似:

@Mock Issue issue;
@Mock URI uri;
@Before
public void setup() {
    when(uri.getHost()).thenReturn(JIRA_HOST);
    when(issue.getSelf()).thenReturn(uri);
}

相关内容

  • 没有找到相关文章

最新更新