我正在开发一个使用JIRA's REST Client的J2EE项目。
此客户端返回Jira issue
对象。
Issue
课程的部分字段为key
,self
,id
,summary
等。
这里的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
。
有人能告诉我如何模拟链式方法调用。
答案 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);
}