JUnit理论和参数化检验的区别

2022-08-31 15:57:05

理论和参数化检验有什么区别?

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


答案 1

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

理论相似,但概念不同。它们背后的想法是创建基于假设而不是静态值进行测试的测试用例。因此,如果我提供的测试数据根据某些假设为真,则生成的断言始终是确定性的。这背后的驱动思想之一是,您将能够提供无限数量的测试数据,并且您的测试用例仍然是真实的;此外,通常您需要在测试输入数据中测试各种可能性,例如负数。如果以静态方式测试,即提供几个负数,则不能保证您的组件将针对所有负数工作,即使很有可能这样做。

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

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

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


答案 2

参数化.class用单个变量测试“参数化”测试,而理论.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

理论.class类似于Haskell QuickCheck:

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

但快速检查会自动生成参数组合


推荐