Расширение Junit4 или контрольный пример? - PullRequest
0 голосов
/ 11 августа 2010

У нас есть простой веб-сервис для обработки запросов о наших данных.Я хотел бы сделать набор расширений для утверждений / случаев, которые обеспечили бы высокоуровневые методы для тестирования различных аспектов ответа.Например, я мог бы написать assertResultCountMinimum (int).Метод позаботится о построении запроса, его выполнении и распаковке ответа для проверки данных.Я также хотел бы, чтобы

Я хотел убедиться, что у меня в голове есть правильная идея о том, как это сделать.

Сначала создайте собственный класс тестового примера с помощьюправильные методы настройки и демонтажа.Для наших целей MyTestCase.Затем предоставьте ряд классов, расширяющих Assert новыми методами assert.Конечный пользователь этих классов будет расширять MyTestCase и будет использовать созданные мной утверждения.Это шаблон, который я вижу в jWebUnit.

Мне кажется, что я смешиваю и сопоставляю понятия junit 3 и 4.Я хотел бы, чтобы у меня были только 4 концепции.Но я не могу представить, как правильно выстроить это в голове.Кроме того, все методы assert, принадлежащие классу Assert в Junit, являются статическими.Некоторые из моих утверждений потребуют обращения к веб-сервису.Это заставляет меня думать, что я должен просто предоставить утверждения в виде ряда вспомогательных функций внутри MytestCase.Позже он выполняет свою работу, но не чувствует себя хорошо.

Любое понимание, размышления, просьбы о разъяснении, высоко ценится.

Последующее редактирование. Как предлагает Джинн ниже, я создаю суперкласс со всеми моими методами asserts & setup / teardown.На самом деле мои утверждения на самом деле являются вспомогательными функциями, которые обертывают базовые утверждения junit 4, которые я импортирую в свой суперкласс.Любой мой тест просто расширит этот супер класс.Единственное предостережение, которое я рассматриваю, - сделать суперкласс абстрактным, так как не должно быть ни одного экземпляра суперкласса.

1 Ответ

1 голос
/ 11 августа 2010

Марк, я использую два шаблона в JUnit 4. Для утверждений типа утилиты я создал статический класс.Например, ReflectionAssertions.Затем я использую статический импорт для использования этих утверждений в моем тесте JUnit 4.

Для утверждений локального типа, которые используются только в одном классе, я делаю их обычными методами в самом классе теста JUnit 4.Например, assertCallingMyBusinessMethodWithNullBlowsUp ().Они не имеют большого значения для повторного использования.

Я не рассматриваю эти концепции микширования, потому что более поздняя группа не может использоваться повторно вне моего теста.Если бы у меня были многократно используемые утверждения, которые делали вызовы веб-службы (и, следовательно, требовалось состояние), я бы создал суперкласс, который не расширял бы TestCase, и использовал бы это.У моего суперкласса были бы методы state и @Before для настройки.Таким образом, это часть теста.

...