JUnit理论与参数化测试的区别

dog*_*ane 59 java parameterized junit4

理论和参数化测试之间有什么区别?

在创建测试类时,我对实现差异不感兴趣,只是当你选择一个而不是另一个时.

Fab*_*nji 28

据我所知:通过参数化测试,您可以为测试用例提供一系列静态输入.

理论相似但概念不同.它们背后的想法是创建测试用例来测试假设而不是静态值.因此,如果根据某些假设我提供的测试数据为真,那么得到的断言总是确定性的.这背后的驱动思想之一是,您将能够提供无限数量的测试数据,您的测试用例仍然是真实的; 此外,您通常需要在测试输入数据中测试一系列可能性,例如负数.如果您静态测试,即提供一些负数,则无法保证您的组件能够对抗所有负数,即使很可能这样做.

据我所知,xUnit框架尝试通过创建所提供测试数据的所有可能组合来应用理论概念.

在数据驱动的场景中接近场景时应该使用两者(即只有输入改变,但测试总是一遍又一遍地执行相同的断言).

但是,由于理论似乎是实验性的,我只有在需要测试输入数据中的一系列组合时才使用它们.对于所有其他情况,我会使用参数化测试.


gli*_*tak 11

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会自动生成参数组合

  • 这不是真的.您可以使用任意数量的变量(参数)进行参数化测试,使用单个参数进行理论测试.@Fabio Kenji上面的回答很好地解释了真正的差异. (4认同)