2016-12-12 5 views
1

私はJIRA's REST Clientを使用するJ2EEプロジェクトで作業しています。 このクライアントは、Jira issueオブジェクトを返します。 クラスのフィールドのいくつかは、key,self,id,summaryなどです。 ここでは、selfフィールドは基本的にURIです。
たとえばhttp://jira.company.com/rest/api/2.0/issue/12345 私は上記のURIからホストを取得する必要があるユースケースがあります。Mockitoを使用してテストチェーンメソッド呼び出しをユニット化する方法

私はこれをissue.getSelf().getHost()のような方法で行うことができます。
issue.getSelf()は、URI型のオブジェクトを返します。ホストを取得するには、String形式のホストURLを返すURIクラスによって提供されるgetHost()メソッドを使用できます。

すべて正常です。 私は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

実際のコードとテストコードを使用してhttp://stackoverflow.com/help/mcveを作成することはできますか?よく – StackFlowed

+0

@StackFlowed、私はこの記事に追加したコードスニペットが 'M'、' C'と 'V'の部分をカバーしていることをよく理解しています。私は実行可能にするためにすべてのコードを入れることは絶対に必要ではないと思います。コードスニペットは質問に答えるのに十分です。私は、追加のコードを提供する必要がある正当な理由は見当たりません。 –

答えて

2

や模擬注釈は必要ありません。

@Mock Issue issue; 
@Mock URI uri; 

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

これはとても残念です。 Mockitoのメンバーは@DeepMockのようなものを作成する必要があります。それはクールだ。 –

+0

@Downvoter - すべてのコメント? – nickb

関連する問題