番石榴具有自动生成的单元测试用例:
番石榴的单元测试数量惊人:截至2012年7月,番石榴测试包包括286,000多个单独的测试用例。其中大多数都是自动生成的,而不是手工编写的,但是Guava的测试覆盖面非常全面,尤其是对于com.google.common.collect。
它们是如何产生的?使用了哪些技术和技术来设计和生成它们?
番石榴具有自动生成的单元测试用例:
番石榴的单元测试数量惊人:截至2012年7月,番石榴测试包包括286,000多个单独的测试用例。其中大多数都是自动生成的,而不是手工编写的,但是Guava的测试覆盖面非常全面,尤其是对于com.google.common.collect。
它们是如何产生的?使用了哪些技术和技术来设计和生成它们?
Answers:
大量测试中的很大一部分是针对Guava集合实现的。他们编写了通用测试,全面测试了集合接口,并且每个实现都会生成一个套件。见,例如,类叫CollectionAddAllTester
,ListIndexOfTester
。
所有这些都由名为testlib的库提供支持,该库作为Guava的一部分提供。这是很通用的。它支持为任何接口(不仅是集合)编写通用测试。您可以指定Feature
可能的实现并进行测试(例如,如果您的集合不可修改,您期望从中获得不同的结果set.add()
),并且在运行测试时,请指定实现支持的功能。
它基于JUnit 3,而不是4。通常,您有一个扩展TestCase
了名为的方法的类testSomething()
,并且JUnit反射地运行它们。testlib库挂接了这些测试的运行,因此生命周期如下所示:
TestCase
实例TestSubjectGenerator
–这是您在实际创建测试主题时扩展的testlib接口getSubjectGenerator()
可以访问测试对象关键是额外的初始化步骤,使他们可以将特定的测试对象注入通用测试用例中。
我写了一篇关于如何为自己的接口编写testlib生成套件的文章。
(也已在sqa网站上发布了相同的问题。)
有单元测试生成器。例如,在.NET世界中,诸如Microsoft Pex之类的工具可以做到这一点。
例如,Microsoft Pex尝试基于代码分析尝试将所有可能的值用作方法的参数。期望一些参数使该方法引发异常。这样的事情可以自动测试创建。静态值(例如在某些情况下返回的空字符串)也可以自动进行测试。