インターフェイスをモックしようとしています。
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()およびまだIllegalArgumentExceptionがあります。
どんな手掛かり ?
Thxs。
PowerMockitoを使用する必要はありません。そのインターフェースとして、モックされていないロジックに依存していないため、spy()を実行する必要はありません。
このようにして、テストクラスでクラス変数を定義できます。
private FlowCopyParamsBusinessManager flowCopyParamsBusinessManagerMock;
@Before
アノテーション付きメソッド:
flowCopyParamsBusinessManagerMock = Mockito.mock(FlowCopyParamsBusinessManager.class);
List<FlowCopyParams> flowCopyParamsList = new ArrayList<>();
when(flowCopyParamsBusinessManagerMock
.findByAppli(Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList);
次に、テストでflowCopyParamsBusinessManagerMock
を参照します。
FlowCopyParamsBusinessManager.classのインスタンスではなくクラスをスパイしようとしたため、テストが機能しませんでした。
最初に、モックを作成する必要があります。
FlowCopyParamsBusinessManager mockFlowCopyParamsBusinessManager = PowerMockito.mock(FlowCopyParamsBusinessManager.class);
次に、インスタンスをスパイします。
PowerMockito.spy(mockFlowCopyParamsBusinessManager);
PowerMockito.when(mockFlowCopyParamsBusinessManager, "findByAppli", Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList);
それもうまくいきます!
これを実行したのは、この@RunWith(PowerMockRunner.class)をクラスの最上部に配置することです。次に、PowerMockito.mock(MyMock.class)でオブジェクトをモックします。この方法を使用すると、インターフェースまたは最終クラスをモックできます。