需要语法来调用 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);