В своих модульных тестах я пытаюсь выполнить частный метод, используя 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);
@Paul Пол Хорошо, я сделал то, что ты предложил, и все заработало. Если вы можете ответить в ответ, я могу принять его. Спасибо1
Чтобы заставить Whitebox работать, вам нужно смоделировать свой класс GenericExcelCreator
.
Например, используя аннотации Mockito:
@Mock
private GenericExcelCreator genericExcelCreator;
Обычно я присваиваю возвращаемое значение метода новой переменной, прежде чем начать с ней работать. Поскольку я не знаю вашего типа возвращаемого значения, но, учитывая, что Java допускает цепочку методов, вы можете сделать это следующим образом:
Map<Integer, String> columnMapping = Whitebox.invokeMethod(genericExcelCreator, "getExcelMappingJsoDto").getSheets().get(0).getColumnMapping();
Имейте в виду, что Whitebox требуется только имя (метода), поэтому вы не должны добавлять скобки () при передаче его в .invokeMethod
Кроме того, еще одно распространенное использование Whitebox — изменение значения частной переменной в фиктивном классе. Этого вы можете достичь:
Whitebox.setInternalState(yourMockedService, "nameOfYourVariable", variableObjectTypeValue);
Например, у меня может быть класс CleanupService
со сменным логическим значением allowCleanup
, который я хочу протестировать, когда false
.
Это приводит к:
Whitebox.setInternalState(cleanupService, "allowCleanup", false);
genericExcelCreator следует издеваться, если я не ошибаюсь. И затем я бы передал «getExcelMappingJsoDto» в качестве вызываемого метода. Что бы ни возвращал этот метод, его можно затем вызвать с помощью .getSheets().get(0).getColumnMapping().