Лучшая практика JUnit: Различные Приспособления для каждого @Test

Я понимаю, что существует @Before и @BeforeClass, которые используются для определения приспособлений для @Test. Но что я должен использовать, если мне нужны различные приспособления для каждого @Test?

  • Если я определяю приспособление в @Test?
  • Если я создаю тестовый класс для каждого @Test?

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

6
задан Juri Glass 3 May 2010 в 15:18
поделиться

3 ответа

Советы:

  1. Забудьте об одном тестовом классе на образец класса, это мало достоинств. Переключитесь на один тестовый класс для каждой перспективы использования. С одной точки зрения, у вас может быть несколько случаев: верхняя граница, нижняя граница и т. Д. Создайте разные @Tests для тех, кто находится в одном классе.
  2. Помните, что JUnit создаст экземпляр тестового класса для каждого @Test, поэтому каждый тест получит отдельную фиксацию (настроенную теми же методами @Before). Если вам нужен непохожий прибор, вам нужен другой тестовый класс, потому что вы находитесь в другой точке зрения (см. 1.)
  3. Нет ничего плохого в настройке прибора для конкретного теста, но вы должны попытаться сохранить тест в чистоте. так что это рассказывает историю. Эта история должна быть особенно ясной, когда тест не проходит, поэтому разные, хорошо названные @Test для каждого случая (см. 1.)
14
ответ дан 8 December 2019 в 17:19
поделиться

Я бы посоветовал создать отдельный класс на основе различных необходимых вам устройств. Если у вас есть два разных прибора, вам нужно просто создать два разных класса (дайте им удобное имя). Но я бы подумал второй раз об этом, в частности о разнице в светильниках и о том, почему они разные. Может быть, вы находитесь на пути к своего рода интеграционному тесту вместо модульного?

0
ответ дан 8 December 2019 в 17:19
поделиться

Если вы уверены, что ваш прибор уникален для отдельного теста, тогда он принадлежит методу @Test . Однако это не типично. Может случиться так, что какая-то его часть уникальна или вы неправильно параметризовали / извлекли ее, но обычно вы будете использовать много одних и тех же данных между тестами.

В конечном итоге приспособление является частью теста. Размещение фикстуры в @Before было принято как шаблон xUnit, потому что тесты всегда:

  1. готовят тестовые данные / имитируют
  2. выполняют операции с SUT
  3. проверяют / подтверждают состояние / поведение
  4. уничтожают тестовые данные / mocks

и шаги 1 ( @Before ) и 4 ( @After ) многократно (по крайней мере частично) повторно используются в связанных тестах. Поскольку xUnit очень серьезно относится к независимости тестирования, он предлагает методы фиксации, гарантирующие, что они всегда будут запускаться и тестовые данные создаются / уничтожаются должным образом.

0
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: