Junit и EasyMock понимают разъяснения - PullRequest
2 голосов
/ 22 апреля 2010

Тем не менее, сейчас я использую JUnit, я столкнулся с EasyMock, я понимаю, что оба предназначены для одной цели. Правильно ли мое понимание?

Какие преимущества у EasyMock перед Junit?

Какой из них проще настроить?

Есть ли у EasyMock какие-либо ограничения?

Пожалуйста, помогите мне выучить

Ответы [ 3 ]

7 голосов
/ 23 апреля 2010

Когда я объясняю юнит-тестирование, мне нравится описывать их как список фаз:

  • Настройка теста: определите и создайте все данные и объекты, необходимые для тестов
  • Ожидания. Скажите, какие методы и параметры вы ожидаете выполнить во время теста
  • Проверка: фактическое поведение / вызов метода, который вы хотите проверить
  • Утверждения: утверждения, которые подтверждают, что результаты теста были успешными
  • Test Tear down: уничтожить любые побочные эффекты, которые произошли во время теста

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

  • TestNG
  • Jtest
  • jBehave (вроде)
  • jDave (вроде)

Другие языковые эквиваленты включают в себя:

  • PHP - phpUnit
  • Ruby - Test :: Unit
  • Flash - FlexUnit

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

  • EasyMock
  • JMock
  • JMockit

Все эти библиотеки являются дополнениями к любой из вышеперечисленных платформ модульного тестирования, которые я перечислил, включая jUnit. Они добавляют возможность определять фиктивные объекты. Имитируемым объектам присваиваются «ожидания», которые затем утверждаются на этапе утверждений. Каждая библиотека Mock выполняет это немного по-своему, но основными моделями являются

  • Запись воспроизведения - EasyMock
  • Ожидания - jMock, jMockIt

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

Другие языки (поскольку они пришли в мир модульного тестирования позже, чем Java), по большей части не имеют этого разделения. Библиотека модульного тестирования и библиотека Mock - это одно и то же. Это касается phpunit, rspec. Я полагаю, что jUnit не будет включать это изначально в ближайшее время, так как уже есть такой богатый набор доступных альтернативных библиотек.

3 голосов
/ 22 апреля 2010

Они не одно и то же

JUnit - это инфраструктура тестирования xUnit - в ней есть тестовый прогон, который зацикливается на ваших тестовых пакетах, выполняет каждый автоматизированный модульный тест и записывает результаты.

EasyMock - это фреймворк-объект . Он используется для замены трудных для настройки соавторов на манекены / подделки / mocks, чтобы помочь сосредоточиться на поведении, которое я собираюсь протестировать.
например если мой SUT.AuditCustomers () вызывает DAO.GetCustomer (databasePath), в моем тесте я бы хотел сосредоточиться на методе AuditCustomers (), поэтому я бы использовал mockDAO, который не считывает клиентов из базы данных, вместо этого возвращает известные / жестко закодированные объекты заказчика для легкого тестирования. Это также дает преимущество, заключающееся в том, что любая ошибка в GetCustomer не завершается тестом AuditCustomers ()

0 голосов
/ 22 апреля 2010

Я не уверен, но я думаю, что JUnit и EasyMock вместо того, чтобы быть эксклюзивными друг для друга, должны работать в тандеме вместе. Идея JUnit состоит в том, чтобы протестировать данный метод, и поэтому вы хотите внедрить в него фиктивные экземпляры других классов, чтобы убедиться, что тест JUnit вообще не зависит от других методов класса. Эту цель предоставления фиктивных объектов в JUnit выполняют EasyMock и другие подобные создатели фиктивных объектов. Аналогичная идея используется при использовании Spring для внедрения фиктивных реализаций в JUnit.

EasyMock кажется многообещающим, но вам следует оценить, соответствуют ли Spring или другие генераторы прокси-объектов вашему сценарию.

...