我被自动化单元测试的错误咬死了。我感觉到了它可以提供的代码库的好处和信心。
对于代码中哪些部分值得进行单元测试,我也有合理的直觉。有逻辑的代码,可能是杂乱无章的代码(因为它处理的是一些混乱的需求),您很乐意封装这些代码,这些代码可能有一些奇怪的边缘条件。
在我的工作场所,我们利用了一些相当利基的工具。为了论证起见,我可以肯定地看到,这些工具提供了特性和效率,使得它们对于完成特定的工作是必不可少的。
我面临的挑战是,我肯定在这些工具中实现了逻辑,我的直觉说“这应该用单元测试来解决”。
我测试过这些代码..。
虽然进展感觉很好,但我觉得我错过了我已经成为xUnit粉丝的体验。
xUnit样式测试从根本上是针对面向对象语言的吗?
发布于 2013-03-07 07:27:29
区别不在于面向对象与否,而在于测试单个函数(“白盒测试”)与完整程序(“黑匣子测试”)。它与其说是单独的情况,不如说是一个连续体,在这个连续体中,各种技术混合在一起,相互匹配。
工具也不是一体式的。测试框架由以下四部分组成:
这些组件大多是正交的,它们的独立实现可以结合起来,不同类型的组件和每个组件的多个实现。
找到所有测试用例并执行它们的组件。多个测试运行程序可以通过简单地从另一个运行程序调用一个测试运行程序作为测试用例来组合在一起。可能就像脚本目录上的for-循环一样简单,而这正是在组合不同框架中编写的测试时经常作为顶级运行程序使用的。
您可以在CTest或shUnit中找到一些通用的测试运行程序。这两种方法都提供了比较文件中输出的方法。
perl 测试::线束在目录中运行脚本时也可以被视为通用运行程序。perl也非常适合测试外部程序。
每个单元测试框架都生成失败测试的列表。如果您组合了多个框架,您可以只收集所有单独的报告,或者使用类似亚基或测试::线束's“的”点击“来提供很好的统一进度和总结。
断言
这是测试测试代码产生预期结果的方式,并与代码的接口方式有关。
这是关于在不设置所有实际依赖项的情况下构建测试环境。例如,设置一个数据库访问层,该层将返回指定的响应集,而不设置实际的数据库等等。
不可能自动化太多,因为您需要提供它应该返回的数据。这往往不是你想要的。也就是说,无论如何,您需要根据实际数据库或其他数据源中的示例数据来测试应用程序,而附加的细粒度模块测试通常是一项回报递减的工作。
我不认为有什么可概括的。对于大多数xUnits来说,有一些东西会为接口生成虚拟实现,但仅此而已。您只需考虑要测试的组件需要什么,以及在本地提供组件的最简单方法。对于与某些web服务通信的内容,您可以在本地运行一些轻量级http服务器。对于使用ODBC (或DBI或其他通用API)的数据库工具,您可以在sqlite上进行测试,即使它通常使用大型服务器等。对于只读取文件的工具,显然只需在合适的测试数据集中复制即可。
发布于 2013-03-05 20:18:27
我不完全确定您在这里讨论的是什么类型的工具,或者是什么使它们很难测试。
但它是否值得一看ApprovalTests呢?这是一个跨语言(Java,C#,VB.Net,PHP,Ruby)框架,它位于任何单元测试运行程序下面。它采用的方法是:而不是编写、测试和指定预期的结果,而是编写测试,不指定结果,运行测试,然后显示结果。你批准了。从那时起,每次运行测试时,如果测试结果与批准时相同,那么它就会通过;如果测试发生了更改,则会失败(向您提供一个差异)。
这对于测试不仅仅返回简单的标量结果(集合、XML文档等)的代码是很好的。而且,因为它运行在任何一个主要的单元测试框架下,所以您不会丢失任何关于自动化的工具,等等。
https://softwareengineering.stackexchange.com/questions/189361
复制相似问题