Исправьте ваш код
Проверочное простое исправление в ваших классах: внедрите hashCode
и equals
в Person
и Room
, чтобы при проверке Powermock фактически можно было сравнивать два объекта на равенство, а не просто полагаться на ссылку на объект.
Исправьте ваши тесты
Если вы не хотите исправлять свой код, но тестировать, вы можете использовать средство сопоставления Mockito (т.е. org.mockito.Matchers.eq
или org.mockito.Matchers.any
). Но учтите, что eq
зависит от equals
и не будет работать, если вы не реализуете его (см. Выше). Но any
будет соответствовать любому объекту этого типа (удивительно!)
PowerMockito.verifyNew(Meeting.class)
.withArguments(eq(1),eq(6),eq(11),eq(13),
any(List.class),
any(Room.class),
eq("description"));
Если фактическое значение имеет значение, вы можете использовать ArgumentCapture вместо сопоставителя и проверить захваченное значение.
Теоретически , должно выглядеть так:
final ArgumentCaptor<Person> personCaptor = forClass(Person.class);
final ArgumentCaptor<Room> roomCaptor = forClass(Room.class);
PowerMockito.verifyNew(Planner.class)
.withArguments(eq(1),eq(6),eq(11),eq(13),
personCaptor.capture(),
roomCaptor.capture(),
eq("description"));
final Person passedParam = personCaptor.getValue();
//do your comparison here
Но я не запустил пример захвата, так что, возможно, это возможно только с простым Mockito.
Только не надо!
Все, что сказано, вы должны проверить свой общий подход. Использование Whitebox-Testing может создать очень хрупкие тесты и не сильно поможет в рефакторинге, а также может способствовать развитию плохого класса.
Неосторожное использование Powermockito - это anti-pattern . Это очень мощный инструмент для тестирования непроверенного, то есть плохо разработанного унаследованного кода из средневековья Интернета, где домашние страницы были созданными вручную HTML-кодами и полными шатких GIF-файлов.
Не используйте его для новых, новых проектов. Просто не надо.
Вместо этого попробуйте сосредоточиться на наблюдаемом результате любого действия. Вызов метода scheduleMeeting()
может привести к любому результату, который легче проверить - важен результат, а не способ их получения. Поверьте мне, ни один пользователь не становится счастливее, когда вызывается конструктор.
Результаты могут быть
- экземпляр собрания (в качестве возвращаемого значения это будет лучше всего в вашем примере)
- изменение состояния в планировщике (есть получатели?)
- изменение состояния в нисходящем сервисе / дБ
- письменный файл
- вывод, записанный в System.out