2017-11-20 10 views
0

Java 7でMockito 1.10.18を使用しています。非静的メソッドを連続して呼び出すと、どのように異なる結果が得られますか?私はモックとしたいの呼び出しのためのAPIは、私は「接続」であることがわかりますが、だから私はそう...Mockitoでは、静的でないメソッドへのconseuctive呼び出しで異なる結果を返す適切な方法は何ですか?

connection = Mockito.spy(connection); 
    ReflectionTestUtils.setField(m_regOrderItemDao, "connection", connection); 
... 
Mockito.when(connection.query(Mockito.anyString())).thenReturn(queryResults1, queryResults2); 

ように私のJUnitテストでモック通話を設定

QueryResult query(String query) 

のように見えますタイプの「com.sforce.soap.enterp[email protected]62e8ef9f」(それが適切にモックとしてキャストされる)、上記の例外が生じている...

[MalformedQueryFault [ApiQueryFault [ApiFault exceptionCode='MALFORMED_QUERY' 
exceptionMessage='SOQL statements cannot be empty or null' 
extendedErrorDetails='{[0]}' 
] 
row='-1' 
column='-1' 
] 
] 

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 

それあたかも

connection.query(Mockito.anyString()) 

何とか実際に実行されています。私のモックが連続コールごとに適切な結果を返すようなものを設定する正しい方法(そしてシンプルな)方法は何ですか?

答えて

1
Mockito.when(connection.query(Mockito.anyString())).thenReturn(queryResults1).thenReturn(queryResults2); 

あなたはクエリはあなたが doReturn(...)この形式を使用する必要があり、実行することにしたい。(..)いけないので。

Mockito.doReturn(queryResults1).doReturn(queryResults2).when(connection).query(Mockito.anyString()) 

上記の文の間に違いはありません。しかし、あなたがスパイを使用している場合、When(...)。then return()は、実際のメソッドを最初に呼び出してから復帰します。したがって、doReturn(...)を使用する必要があります(この場合は..)。
詳細here

+0

この結果、同じエラーが発生します。あなたが私の質問の部分を見たのかどうか分かりません。どこに文があるのか​​わかりません。 "connection.query(Mockito.anyString())"あなたの解決策では、それはまだ同じセクションについて不平を言います – Dave

+0

これは質問への答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](/ review/low-quality-posts/18007530) – Jobin

+0

*コードオンリー*の回答はスタックオーバーフローで受け付けますが、説明を追加することをお勧めします。 [序文でさえ、 "このコードはうまくいくはずです"] – Tsyvarev

関連する問題