需要语法来调用 powermock whitebox()
Need syntax to call powermock whitebox()
在我的单元测试中,我尝试使用 Whitebox.invokeMethod 执行私有方法,但我不知道有效的语法。我想调用它(getExcelMappingJsoDto() 是私有方法)但不确定如何传递参数
Map<Integer,String> columnMapping = genericExcelCreator.getExcelMappingJsoDto().getSheets().get(0).getColumnMapping();
尝试这样的事情,但无济于事:
Map<Integer,String> columnMapping = Whitebox.invokeMethod(genericExcelCreator, "getExcelMappingJsoDto().getSheets().get(0).getColumnMapping", null);
为了让 Whitebox 正常工作,您需要模拟 GenericExcelCreator
class。
比如使用Mockito的注解:
@Mock
private GenericExcelCreator genericExcelCreator;
通常,在开始使用它之前,我会将方法的 return 值分配给一个新变量。因为我不知道你的 return 类型,但请记住 Java 允许 method-chaining,你可以这样做:
Map<Integer, String> columnMapping = Whitebox.invokeMethod(genericExcelCreator, "getExcelMappingJsoDto").getSheets().get(0).getColumnMapping();
请记住,Whitebox 只需要(方法)名称,因此在将其传递给 .invokeMethod
时不应添加方括号 ()
此外,Whitebox 的另一个常见用途是更改模拟 class 中私有变量的值。您可以通过以下方式实现:
Whitebox.setInternalState(yourMockedService, "nameOfYourVariable", variableObjectTypeValue);
例如,我可以有一个 class CleanupService
和一个名为 allowCleanup
的可互换布尔值,我想在 false
时测试它。
这导致:
Whitebox.setInternalState(cleanupService, "allowCleanup", false);
在我的单元测试中,我尝试使用 Whitebox.invokeMethod 执行私有方法,但我不知道有效的语法。我想调用它(getExcelMappingJsoDto() 是私有方法)但不确定如何传递参数
Map<Integer,String> columnMapping = genericExcelCreator.getExcelMappingJsoDto().getSheets().get(0).getColumnMapping();
尝试这样的事情,但无济于事:
Map<Integer,String> columnMapping = Whitebox.invokeMethod(genericExcelCreator, "getExcelMappingJsoDto().getSheets().get(0).getColumnMapping", null);
为了让 Whitebox 正常工作,您需要模拟 GenericExcelCreator
class。
比如使用Mockito的注解:
@Mock
private GenericExcelCreator genericExcelCreator;
通常,在开始使用它之前,我会将方法的 return 值分配给一个新变量。因为我不知道你的 return 类型,但请记住 Java 允许 method-chaining,你可以这样做:
Map<Integer, String> columnMapping = Whitebox.invokeMethod(genericExcelCreator, "getExcelMappingJsoDto").getSheets().get(0).getColumnMapping();
请记住,Whitebox 只需要(方法)名称,因此在将其传递给 .invokeMethod
此外,Whitebox 的另一个常见用途是更改模拟 class 中私有变量的值。您可以通过以下方式实现:
Whitebox.setInternalState(yourMockedService, "nameOfYourVariable", variableObjectTypeValue);
例如,我可以有一个 class CleanupService
和一个名为 allowCleanup
的可互换布尔值,我想在 false
时测试它。
这导致:
Whitebox.setInternalState(cleanupService, "allowCleanup", false);