2014-08-29 5 views
4

Я просто переработал многие части кода, упростив вещи. Теперь мне нужно реорганизовать тесты, чтобы снова сделать их зелеными, что не так сложно.Mockito: Как идентифицировать неиспользуемые .when() в тестах

Но теперь я немного борюсь, увидев, что мне больше не нужны некоторые из моих .when() объявлений, поскольку эти Mocks больше не будут вызываться. Дело в том, что они не делают мой тест красным, поэтому я могу только идентифицировать их, тщательно просматривая каждый тест и сравнивая его с кодом, что вызывает раздражение и приводит к тому, что он будет таким.

Есть ли возможность сделать неиспользованную .when() 's выкидывает ошибку или такую? Как проверка, которая никогда не бывает? Было бы достаточно сделать это, как в setUp: Mockito.enableDebugMode() или что-то еще, может быть, есть такая возможность? ..

Best

+0

Попробуйте удалить, когда() и запустите тест. Если он становится красным, это «когда», очевидно, требуется. – ponomandr

+0

Если вы пересмотрели свой код и нарушили свои тесты, вы делаете плохие вещи. После повторного факторинга ваши тесты должны оставаться зелеными. Если вы перегруппируете более мелкие шаги, тогда вы можете решать свои тестовые дела по одному и не окажетесь в этом темном месте. Кроме того, ваши тесты должны быть небольшими и понятными, иначе ваши тестируемые классы делают слишком много. – Brad

ответ

0

Может быть, вы можете добавить вызов проверить() для каждого вызова, когда(). Таким образом, исключение вызывается, когда вызов не выполняется?

Если есть автоматическое решение проблемы, пожалуйста, оставьте ответ.

2

Вариант 1 Вы можете удалить вызовы when() из ваших тестов по одному за раз (как это было предложено @ponomandr), пока они не удастся. Неисправный тест означает, что вы добавляете вызов, когда() обратно в свой тест, как это необходимо.

Вариант 2 Хотя вы могли бы подойти к этой проблеме, добавив verify() утверждения для каждого вызова when() (как это было предложено @HansiKrankl), это означает, добавив больше кода (пушистой) для тестовых случаев.

Вариант 3 В качестве другой альтернативы вы можете использовать инструмент покрытия кода, как Emma whichi вы можете запустить из вашего IDE. Тогда это будет случай запуска теста, а затем просмотр того, выполняются ли вызовы в тестируемом классе.

Вариант 4 Есть другие предложения, связанные с попыткой использования count the number of invocations.

Лично я хотел бы пойти с Вариант 1 и начать чистку тестов один за другим. Вы получите лучшее представление о тестах, глядя на них один за другим, и это возможность их очистить, чтобы они были более удобными.

+0

Я нашел вариант 1 хорошо работать, особенно если вы можете чередовать небольшие рефакторинги с тестированием, чтобы уменьшить шум. – cjstehno

0

Хм, что собирается использовать Mockito.verifyNoMoreInteractions (YOUR_MOCKS)? Он будет генерировать исключение, если какой-то макет был настроен с помощью Mockito.when(), но соответствующий метод Mockito.verify() не был вызван этим макетом. Несомненно, это может привести к ложным срабатываниям, но лучше ничего.

Смежные вопросы