2012-01-09 2 views
5

Я хочу проверить свой код, но я замечаю, что некоторые классы бизнес-логики требуют от многих объектов с большим количеством состояний. Но на самом деле связь между этими классами ограничена 1 или 2 способами.Java: извлечение интерфейсов только для тестирования

Это хороший стиль, если я создаю интерфейс с этими двумя методами, и в моем тесте просто создайте макет объекта, который ничего не делает?

Код будет иметь больше интерфейсов, которые действительно не нужны, поэтому я не уверен, что это хорошая идея?

ответ

6

Хотя наличие интерфейсов является хорошей идеей, вам не нужны интерфейсы для издевательств. EasyMock, Mockito и PowerMock все позволяют насмехаться над конкретными классами. Поэтому, учитывая это, вы можете оставить код как есть и использовать Mockito (мой личный фаворит), чтобы издеваться над введенными классами.

FYI, издевательства не должны «ничего не делать». Они должны быть протестированы с каждым возможным возвращаемым значением и каждым возможным исключением.

+1

В соответствии с 2.4 документами, по крайней мере, EasyMock * делает * позволяет насмехаться над интерфейсами. –

+0

Я стою исправлено. –

+0

Обманутые методы запускают побочный эффект для других пакетов и систем, которые мне не очень-то нравятся в тесте, потому что я просто хочу проверить один изолированный аспект. Мокито интересен, я посмотрю на это. –

2

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

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

Если ваши издевательства на самом деле ничего не делают, их можно назвать более подходящими. Обычно реальные издевательства используются для проверки правильности их обращения к ним, и они имеют очень активную роль в тестах.

+0

Хорошо, что я использовал неправильное слово, я хочу, чтобы заглушить тест моего кода :-) –

+0

Это прекрасно, но вы можете попробовать и на самом деле насмешливо, если взаимодействия вообще не сложны. –

+0

Да, это на самом деле и больше, чем я смотрю на код. Тестирование труднее, чем я. На самом деле мне нужно, чтобы качество моего кода сдвигалось к тестируемости. –

2

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

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