Когда я объясняю юнит-тестирование, мне нравится описывать их как список фаз:
- Настройка теста: определите и создайте все данные и объекты, необходимые для тестов
- Ожидания. Скажите, какие методы и параметры вы ожидаете выполнить во время теста
- Проверка: фактическое поведение / вызов метода, который вы хотите проверить
- Утверждения: утверждения, которые подтверждают, что результаты теста были успешными
- Test Tear down: уничтожить любые побочные эффекты, которые произошли во время теста
jUnit является структурой модульного тестирования и предоставляет все, кроме фазы ожиданий тестирования. Альтернативы в пространстве Java включают в себя:
- TestNG
- Jtest
- jBehave (вроде)
- jDave (вроде)
Другие языковые эквиваленты включают в себя:
- PHP - phpUnit
- Ruby - Test :: Unit
- Flash - FlexUnit
Концепция насмешки - это то, что добавило новый этап Ожиданий, и, поскольку jUnit видел большую часть своего основного развития до насмешливого движения, эти функции не были включены в ядро, и набор инструментов для заполнения этого пробела Ява пространство открылось. Эти библиотеки включают
Все эти библиотеки являются дополнениями к любой из вышеперечисленных платформ модульного тестирования, которые я перечислил, включая jUnit. Они добавляют возможность определять фиктивные объекты. Имитируемым объектам присваиваются «ожидания», которые затем утверждаются на этапе утверждений. Каждая библиотека Mock выполняет это немного по-своему, но основными моделями являются
- Запись воспроизведения - EasyMock
- Ожидания - jMock, jMockIt
Я лично являюсь поклонником подхода Ожидания, который является более декларативным и менее подвержен ошибкам, поскольку он требует меньше методов, вызываемых разработчиком, но это стилистическое предпочтение, а не техническое.
Другие языки (поскольку они пришли в мир модульного тестирования позже, чем Java), по большей части не имеют этого разделения. Библиотека модульного тестирования и библиотека Mock - это одно и то же. Это касается phpunit, rspec. Я полагаю, что jUnit не будет включать это изначально в ближайшее время, так как уже есть такой богатый набор доступных альтернативных библиотек.