如何使用Mockito

时间:2016-12-12 21:03:46

标签: java junit mockito

我正在开发一个使用JIRA's REST Client的J2EE项目。 此客户端返回Jira issue对象。 Issue课程的部分字段为keyselfidsummary等。 这里的self字段基本上是一个URI 对于Eg http://jira.company.com/rest/api/2.0/issue/12345 我有一个用例,我必须从上面指定的URI中检索主机。

我可以通过issue.getSelf().getHost()之类的东西来做到这一点 issue.getSelf()返回类型为' URI'的对象为了获得主持人,我可以简单地使用getHost()类提供的URI方法,该方法以String格式返回主机网址。

一切正常。 我在使用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

有人能告诉我如何模拟链式方法调用。

1 个答案:

答案 0 :(得分:4)

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

@Mock Issue issue;
@Mock URI uri;

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