Kik*_*kou 7 java unit-testing mockito powermock
我试图模拟一个界面.
public interface FlowCopyParamsBusinessManager {
List<FlowCopyParams> findByAppli(String application, String sourcePattern)
throws FlowCopyParamsBusinessException;
Run Code Online (Sandbox Code Playgroud)
}
在我的代码中,当我调用此方法findByAppli时,我想返回一个FlowCopyParams列表.
List<FlowCopyParams> lstFlowCopyParams = flowCopyParamsBusinessManager.findByAppli(
"TOTO","TATA);
Run Code Online (Sandbox Code Playgroud)
在这里我尝试了类测试:
@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);
}
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
java.lang.IllegalArgumentException: object is not an instance of declaring class
Run Code Online (Sandbox Code Playgroud)
我不知道为什么因为方法findByAppli必须有两个字符串参数,我把Mockito.anyString()和我仍然有IllegalArgumentException.
任何线索?
Thxs.
您不需要使用PowerMockito,并且作为它的接口,不需要spy(),因为您不依赖于任何非模拟逻辑.
它可以像这样完成,在你的测试类中定义一个类变量.
private FlowCopyParamsBusinessManager flowCopyParamsBusinessManagerMock;
Run Code Online (Sandbox Code Playgroud)
在一个带@Before
注释的方法中:
flowCopyParamsBusinessManagerMock = Mockito.mock(FlowCopyParamsBusinessManager.class);
List<FlowCopyParams> flowCopyParamsList = new ArrayList<>();
when(flowCopyParamsBusinessManagerMock
.findByAppli(Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList);
Run Code Online (Sandbox Code Playgroud)
然后参考flowCopyParamsBusinessManagerMock
你的测试.
归档时间: |
|
查看次数: |
19182 次 |
最近记录: |