Нужен синтаксис для вызова 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);

genericExcelCreator следует издеваться, если я не ошибаюсь. И затем я бы передал «getExcelMappingJsoDto» в качестве вызываемого метода. Что бы ни возвращал этот метод, его можно затем вызвать с помощью .getSheets().get(0).getColumnMapping().

Paul 22.03.2022 14:25

@Paul Пол Хорошо, я сделал то, что ты предложил, и все заработало. Если вы можете ответить в ответ, я могу принять его. Спасибо1

draca 22.03.2022 17:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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); 

Другие вопросы по теме