理论与参数化测试有什么区别?
我对创建测试类时的实现差异不感兴趣,只是当你选择一个而不是另一个时。
答案 0 :(得分:28)
据我所知: 通过参数化测试,您可以为测试用例提供一系列静态输入。
理论相似但概念不同。它们背后的想法是创建测试用例来测试假设而不是静态值。 因此,如果根据某些假设我提供的测试数据为真,那么得到的断言总是确定性的。 这背后的驱动思想之一是,您将能够提供无限数量的测试数据,您的测试用例仍然是真实的;此外,您通常需要在测试输入数据中测试一系列可能性,例如负数。如果您静态测试,即提供一些负数,则无法保证您的组件能够对抗所有负数,即使很可能这样做。
据我所知,xUnit框架尝试通过创建所提供测试数据的所有可能组合来应用理论概念。
在接近数据驱动场景中的场景时应该使用两者(即只输入更改,但测试总是反复执行相同的断言)。
但是,既然理论似乎是实验性的,那么只有当我需要在输入数据中测试一系列组合时,我才会使用它们。对于所有其他情况,我会使用参数化测试。
答案 1 :(得分: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会自动生成参数组合
答案 2 :(得分:0)
根据我的理解,区别在于当你想要做的就是测试一组不同的输入(单独测试每一个)时使用参数化测试,理论是参数化测试的一个特例,你正在测试它每个输入作为一个整体(每个参数都需要为真)。
答案 3 :(得分:0)
回复有点迟了。但它对未来的测试人员有所帮助。
参数化测试与理论
答案 4 :(得分:0)
除了以上回复: 在具有4个值和2个测试方法的输入
@RunWith(Theories.class) - 将生成2个JUnit测试
@RunWith(Parameterized.class) - 将生成8个(4个输入x 2个方法)JUnit测试