В чем разница между теорией и параметризированным тестом?
Мне не интересны различия в реализации при создании тестовых классов, только когда вы выбираете один из них.
В чем разница между теорией и параметризированным тестом?
Мне не интересны различия в реализации при создании тестовых классов, только когда вы выбираете один из них.
Из того, что я понимаю: С параметризованными тестами вы можете поставить ряд статических входов в тестовый файл.
Теории похожи, но разные по понятию. Идея, лежащая в их основе, заключается в создании тестовых примеров, которые проверяются на основе допущений, а не статических значений. Поэтому, если мои предоставленные тестовые данные истинны в соответствии с некоторыми предположениями, полученное утверждение всегда детерминировано. Одна из движущих идей заключается в том, что вы сможете предоставить бесконечное количество тестовых данных, и ваш тестовый пример все равно будет правдой; Кроме того, часто вам нужно проверить все возможности возможностей в тестовых входных данных, например, отрицательные числа. Если вы проверите это статически, то есть поставьте несколько отрицательных чисел, не гарантируется, что ваш компонент будет работать против всех отрицательных чисел, даже если это очень вероятно.
Из того, что я могу сказать, фреймворки xUnit пытаются применять концепции теорий, создавая все возможные комбинации предоставленных вами тестовых данных.
Оба должны использоваться при приближении к сценарию в сценарии, управляемом данными (т.е. изменяются только входы, но тест всегда делает одни и те же утверждения снова и снова).
Но, поскольку теории кажутся экспериментальными, я бы использовал их только в том случае, если мне нужно было проверить последовательность комбинаций в моих входных данных. Для всех остальных случаев я бы использовал Параметрированные тесты.
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 автоматически генерирует комбинации параметров
По моему мнению, разница заключается в том, что параметр Parameterized Test используется, когда все, что вы хотите сделать, это протестировать другой набор входов (протестировать каждый отдельно), Теория - это частный случай Параметрированного теста, в котором вы тестируете каждый вход в целом (каждый параметр должен быть правдой).
Немного поздно в ответ. Но это было бы полезно будущим тестировщикам.
Параметрированные тесты против теорий
В дополнение к вышеприведенным ответам: На входе с 4 значениями и 2 методами тестирования
@RunWith (Theories.class) - сгенерирует 2 теста JUnit
@RunWith (Parameterized.class) - сгенерирует 8 (4 входа х 2 метода) Тесты JUnit