Какой самый простой способ заглушки сложного интерфейса в Java? - PullRequest
3 голосов
/ 18 сентября 2008

Мой код принимает интерфейс в качестве входных данных, но выполняет только несколько методов интерфейса (часто только получателей).

При тестировании кода я бы хотел определить анонимный внутренний класс, который возвращает тестовые данные. Но что мне делать со всеми другими методами, которые требует интерфейс?

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

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

Ответы [ 5 ]

5 голосов
/ 18 сентября 2008

Если вы используете JUnit для тестирования, используйте заглушки вместо заглушек.

Прочитайте основную статью Мартина Фаулера " Насмешки - это не тупики "

Я рекомендую EasyMock Framework, он работает как шарм автоматически. Он немного сложнее, чем примеры кода в статье Фаулера, особенно когда вы используете библиотеку unitils для переноса EasyMock, поэтому синтаксис будет намного проще, чем в статье. Кроме того, если у вас нет интерфейса, но вы хотите смоделировать конкретный класс, EasyMock имеет расширение класса.

1 голос
/ 18 сентября 2008

Проверьте JMock.

http://www.jmock.org/

0 голосов
/ 18 сентября 2008

EasyMock или JMock, безусловно, победители. Я не использовал JMock, но я знаю, что с EasyMock вы можете настроить объект Mock в соответствии со сценарием тестирования, и он будет возвращать определенные значения в определенных ситуациях или точках во время теста. Это довольно легко учиться и начать работать, как правило, менее чем за час.

0 голосов
/ 18 сентября 2008

Я считаю, что классический способ - создать абстрактный класс с пустыми методами. По крайней мере, именно так Sun сделала для MouseListener, создав MouseAdapter , чтобы упростить использование этих событий.

0 голосов
/ 18 сентября 2008

Напишите «класс адаптера» и перезаписывайте только те методы, которые вам нужны.

class MyAdapter extends MyClass {
  public void A() {
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...