Я думаю, что ваша текущая тестовая реализация близка к идеальной. Любое дальнейшее уплотнение рискует либо изменить семантику теста, либо скрыть цель теста для читателя (или обоих).
Однако, если вы ищете способ ожидать определенного количества вызовов метода, вы можете использовать exactly(n).of()
:
mockery.checking(new Expectations() {{
exactly(expectedParameters.length()).of(bar).doIt(with(anyOf(expectedParameters)));
}});
(я пропустил проверку равномерности, но вы поняли). Это похоже на пример jmockit в другом ответе. Помните, что это не то же самое, что ваш первоначальный тест. В частности это не проверяет:
- Порядок звонков на
doIt
- что каждый элемент списка параметров передается ровно один раз
Например, этот тест прошел бы, если бы ваш метод повторялся по списку в обратном порядке или если он просто вызывал метод doIt
n
раз, но каждый раз передавал первый элемент списка. Если вы хотите, чтобы каждый элемент в списке был пропущен, вам придется многократно повторять его, устанавливая индивидуальное ожидание для каждого. Если вам не важен порядок вызовов, вы можете опустить использование Последовательности (в этом случае вы можете захотеть изменить свой оригинальный метод, чтобы принимать Коллекцию вместо Списка).