java - 如何为静态 void 方法实现 doNothing()?
问题描述
我试图模拟一种静态 void 方法,我尝试了 PowerMock 但总是得到 NullPointer 异常。
我们正在尝试模拟以下调用 -
public Class XYZ{
public void method1(){
....
SampleClass.methodTypeStatic1().methodTypeStatic2("xyz", "mno", classVeriable);
}
主要课程是 -
public class SampleClass implements SampleClassParent{
private static SampleClass var1;
public static SampleClass methodTypeStatic1(){
if (var1 == null) {
//Do something on var1
}
return var1;
}
public void methodTypeStatic2(String localVar1, String localVar2, DifferentStaticClass localVar3) {
//Do something
}}
我试图在我的测试课中以这种方式模拟通话 -
@RunWith(PowerMockRunner.class)
@PrepareForTest({SampleClass.class})
public class XYZTest{
@InjectMocks
XYZ xyzTestService;
@Test
public void testMethod1(){
...
PowerMockito.mockStatic(SampleClass.class);
PowerMockito.doNothing().when(SampleClass.methodTypeStatic1());
xyzTestService.method1();
}
还要提到的是,SampleClass.class 不是我们代码的一部分,我们已将此外部类导入我们的代码库以执行某些任务。
解决方案
如果要模拟非 void 方法,则需要在模拟上定义此方法的行为。您可以doNothing
免费获得(因为这是模拟所做的),但是您需要定义该方法应该返回的内容。
您的测试可能如下所示:
@Test
public void testMethod1() {
SampleClass sample = new SampleClass();
PowerMockito.mockStatic(SampleClass.class);
PowerMockito.when(SampleClass.methodTypeStatic1()).thenReturn(sample);
XYZ xyzTestService = new XYZ();
xyzTestService.method1();
}
您没有提及任何@Mock
注释,因此@InjectMocks
除了创建XYZ
对象之外, using 对您没有任何作用。
推荐阅读
- r - 随着 R 3.6.1 的发布,游戏中的警告
- java - Jackson 反序列化为默认子类型
- list - 基于特定条件在 Pyomo 模型中创建变量 x[i,j] 列表
- wordpress - 如何在古腾堡块中创建多个元字段
- python - keras Lambda 中的切片无法按预期工作
- ssis - 如何确定一个包是在 Visual Studio 本地运行还是在服务器上运行?
- kubernetes - 特定请求被发送到 Nginx Ingress 上的一般路径
- snapchat - 如何使用从 Snapchat 收到的 AccessToken 来获取 UserData?
- reactjs - 使用 react-scripts test 运行时测试通过,但使用 jest 运行时失败
- python - 如何使用 tkinter GUI 在 python 中选择函数参数和文件输出路径?