JUnit理论与参数化testing的区别

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

在创buildtesting类时,我不感兴趣的实现差异,只是当你select一个。

根据我的理解:通过参数化testing,您可以为testing用例提供一系列静态input。

理论相似但概念不同。 他们背后的想法是创buildtesting案例,而不是静态值的假设testing。 所以,如果我提供的testing数据是真实的根据一些假设,结果断言总是确定性的。 其中一个驱动思想是,你将能够提供无限数量的testing数据,而你的testing用例仍然是真实的; 另外,您经常需要在testinginput数据(如负数)内testing一系列可能性。 如果您静态testing,即提供一些负数,则不能保证您的组件能够对付所有负数,即使这样做极有可能。

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

在数据驱动场景中接近场景时(即只有input变化,但testing总是一遍又一遍地做相同的断言),都应该使用两者。

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

Parameterized.class用单个variablestesting“parametrize”testing,而Theories.class用几个variables的所有组合来“参数化”。

例如,请阅读:

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

根据我的理解,不同的是,当你想要做的只是testing一组不同的input(单独testing每个input)时,使用参数化testing,理论是参数化testing的一个特例,一个整体(每个参数都必须是真实的)。

有点晚回复。 但是对未来的testing人员会有所帮助。

参数化testingvs理论

  • 类注解“@RunWith(Parameterized.class)”VS“@RunWith(Theories.class)”
  • testinginput是从返回集合的静态方法中检索的,并且用@Parameters和用@DataPoints或@DataPoint注解的静态字段进行了注释。
  • input被传递给构造函数(必需的)并被testing方法使用,input则直接传递给testing方法。
  • testing方法使用@Test进行注释,并且不需要参数vs Test方法使用@Theory进行注释,并且可能需要参数

除了以上的回应:在一个input有4个值和2个testing方法

  • @RunWith(Theories.class) – 将生成2个JUnittesting

  • @RunWith(Parameterized.class) – 将生成8个(4个inputx 2个方法)的JUnittesting