Подтвердить что ты не робот

Разница между теориями Юнита и параметризованными тестами

В чем разница между теорией и параметризированным тестом?

Мне не интересны различия в реализации при создании тестовых классов, только когда вы выбираете один из них.

4b9b3361

Ответ 1

Из того, что я понимаю: С параметризованными тестами вы можете поставить ряд статических входов в тестовый файл.

Теории похожи, но разные по понятию. Идея, лежащая в их основе, заключается в создании тестовых примеров, которые проверяются на основе допущений, а не статических значений. Поэтому, если мои предоставленные тестовые данные истинны в соответствии с некоторыми предположениями, полученное утверждение всегда детерминировано. Одна из движущих идей заключается в том, что вы сможете предоставить бесконечное количество тестовых данных, и ваш тестовый пример все равно будет правдой; Кроме того, часто вам нужно проверить все возможности возможностей в тестовых входных данных, например, отрицательные числа. Если вы проверите это статически, то есть поставьте несколько отрицательных чисел, не гарантируется, что ваш компонент будет работать против всех отрицательных чисел, даже если это очень вероятно.

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

Оба должны использоваться при приближении к сценарию в сценарии, управляемом данными (т.е. изменяются только входы, но тест всегда делает одни и те же утверждения снова и снова).

Но, поскольку теории кажутся экспериментальными, я бы использовал их только в том случае, если мне нужно было проверить последовательность комбинаций в моих входных данных. Для всех остальных случаев я бы использовал Параметрированные тесты.

Ответ 2

Parameterized.class проверяет тесты "параметризировать" с помощью одной переменной, тогда как Theories.class "параметризует" со всеми комбинациями нескольких переменных.

Для примеров, пожалуйста, прочтите:

http://blogs.oracle.com/jacobc/entry/parameterized_unit_tests_with_junit

http://blog.schauderhaft.de/2010/02/07/junit-theories/

http://blogs.oracle.com/jacobc/entry/junit_theories

Theories.class похож на Haskell QuickCheck:

http://en.wikibooks.org/wiki/Haskell/Testing

но QuickCheck автоматически генерирует комбинации параметров

Ответ 3

По моему мнению, разница заключается в том, что параметр Parameterized Test используется, когда все, что вы хотите сделать, это протестировать другой набор входов (протестировать каждый отдельно), Теория - это частный случай Параметрированного теста, в котором вы тестируете каждый вход в целом (каждый параметр должен быть правдой).

Ответ 4

Немного поздно в ответ. Но это было бы полезно будущим тестировщикам.

Параметрированные тесты против теорий

  • Класс, аннотированный с помощью "@RunWith (Parameterized.class)" VS "@RunWith (Theories.class)"
  • Тестовые входы извлекаются из статического метода, возвращающего Collection и аннотированного с помощью @Parameters против статических полей, аннотированных с помощью @DataPoints или @DataPoint.
  • Входы передаются конструктору (обязательно) и используются методом тестирования. Входы напрямую передаются методу тестирования.
  • Метод тестирования аннотируется с помощью @Test и doen't принимает аргументы vs Метод теста аннотируется с помощью @Theory и может принимать аргументы

Ответ 5

В дополнение к вышеприведенным ответам: На входе с 4 значениями и 2 методами тестирования

  • @RunWith (Theories.class) - сгенерирует 2 теста JUnit

  • @RunWith (Parameterized.class) - сгенерирует 8 (4 входа х 2 метода) Тесты JUnit