2016-09-01 26 views
6

インターフェイスをモックしようとしています。インターフェイスをモックする方法Java PowerMockito

public interface FlowCopyParamsBusinessManager { 
List<FlowCopyParams> findByAppli(String application, String sourcePattern) 
     throws FlowCopyParamsBusinessException; 

}私のコードで

、私はfindByAppliこのメソッドを呼び出したとき、私はFlowCopyParamsのリストを返すようにしたいと思います。ここで

List<FlowCopyParams> lstFlowCopyParams = flowCopyParamsBusinessManager.findByAppli(
        "TOTO","TATA); 

クラスのテストで私の試み:

@BeforeClass 
public static void mockBeanIn() throws Exception { 
List<FlowCopyParams> flowCopyParamsList = new ArrayList<>(); 

PowerMockito.spy(FlowCopyParamsBusinessManager.class); 
PowerMockito.when(FlowCopyParamsBusinessManager.class, "findByAppli", Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); 
} 

私はこのエラーがあります:

java.lang.IllegalArgumentException: object is not an instance of declaring class 

私はなぜ知らない方法findByAppliが2つの文字列パラメータを持っている必要がありますので、と私はを入れてMockito.anyString()と私はまだを持っていますIllegalArgumentExceptiにあります。

ヒント?

Thxs。

答えて

7

PowerMockitoを使用する必要はなく、インターフェイスとして、非モックロジックに頼らないので、spy()する必要はありません。

これは、テストクラスでクラス変数を定義することができます。 @Before注釈付きの方法で

private FlowCopyParamsBusinessManager flowCopyParamsBusinessManagerMock; 

flowCopyParamsBusinessManagerMock = Mockito.mock(FlowCopyParamsBusinessManager.class); 
List<FlowCopyParams> flowCopyParamsList = new ArrayList<>(); 
when(flowCopyParamsBusinessManagerMock 
.findByAppli(Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); 

次に、あなたのテストでflowCopyParamsBusinessManagerMockを参照してください。

+0

私はスパイが具体的に何かを知りません。 – Kikou

+0

Spyでは、オブジェクトの元の具象実装の部分(メソッド)を使用できますが、模造は元の実装を提供しません。 – UserF40

1

私はクラスをスパイしようとしていたため、FlowCopyParamsBusinessManager.classのインスタンスではなく、私のテストは機能しませんでした。

まず、我々はモックを作成する必要があります。

FlowCopyParamsBusinessManager mockFlowCopyParamsBusinessManager = PowerMockito.mock(FlowCopyParamsBusinessManager.class); 

その後、インスタンスをスパイ:

PowerMockito.spy(mockFlowCopyParamsBusinessManager); 
PowerMockito.when(mockFlowCopyParamsBusinessManager, "findByAppli", Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); 

それは同様に動作します!

+0

私はインターフェイスが嘲笑されないことを明確に述べているこのエラーを受け取ります..上記のコードはどのように機能していますか? 'Mockitoはこのクラスをモックできません:class org.springframework.security.core.Authentication $$ EnhancerByMockitoWithCGLIB $$ 95622b34 Mockitoは可視クラスと非finalクラスのみをモックできます.' – Dish

0

これをこの@RunWith(PowerMockRunner.class)をクラスの先頭に配置しました。次に、PowerMockito.mock(MyMock.class)でObjectをモックします。このようにして、インターフェイスまたは最終クラスをモックできます。

関連する問題