首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动化单元测试创建

自动化单元测试创建
EN

Software Engineering用户
提问于 2011-09-18 01:54:28
回答 3查看 2.5K关注 0票数 12

哪些策略可以用于自动化单元测试用例的创建?您需要在每个类中查看哪些方面才能至少生成一个体面的测试用例框架?

我意识到一个全面的自动解决方案并不实用,但我希望至少通过创建一个框架来加快测试创建的速度。我并不是在寻找代码示例,也许是一些关于从哪里开始的建议,或者是这样的例子,这样我就可以看到他们是如何处理的,以及可能发生的事情。

我特别感兴趣的是在PHP中创建单元测试框架的方法,它没有提供其他语言提供的所有工具,比如完整的类型暗示

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2011-09-18 03:20:07

您的策略和框架在很大程度上取决于您想要生成的测试类型、您要寻找的覆盖范围以及您正在工作的语言/环境。

直接编写一个测试生成器,对于C或Java这样的语言,它读取类签名并自动生成标准角情况下的测试(传入0、2个随机值、MAX_INT、MIN_INT、整数参数、空值等)。然后,您可以运行生成的测试,记录每个测试的结果,并对它们进行手动筛选以删除不相关的测试,对通过的测试批准可接受的结果(这样它们就可以从那时起自动通过),并将失败的结果标记为无效的结果。

您可以通过类的标记/注释/重构来增强这一点,以帮助生成器获得额外的提示。您可能有一个标记,它列出了方法调用允许引发的所有可能的异常,或者为整数参数提供了一个有效整数的缩小范围。把这些看作是短小精悍的,因为你必须自己写测试。

因此,下面是一些您想要查看的组件:

  • 自动解析源代码/函数签名/手动注释、生成标准测试用例或为等待输入完成的测试用例概述/签名的组件。
  • 一种不断增长/不断变化的标记/注释/注释语言,可以达到任何粒度级别(方法/类/签名/同时循环/等等)表示自动测试生成器的提示。理想情况下,您应该能够使用这种语言,而不必对框架或其中的任何块进行重新编码。
  • 自动化测试运行程序,能够识别新的/旧的测试,并根据每个测试的“可接受的”答案记录/测试。理想情况下,该运行程序将构建测试运行、接受/拒绝结果以及当前每个测试的可接受结果的数据库。
  • 自动"object faker“,它给定一个类名和名称映射->值,它可以生成一个模仿类的对象,为函数调用、访问器、公共数据插槽等返回可定制的数据。

有很多测试框架,其中已经包含了针对不同语言和平台的部分功能。虽然自己开始做这项工作并在内部有机地发展这种框架是相当容易的,但它也是一个没完没了的长期项目,很可能会重复现有的工作。我建议先花大量的时间看看什么是可用的,然后决定是否值得花时间深入研究。

票数 6
EN

Software Engineering用户

发布于 2011-09-18 02:12:08

我还没有机会在一个有意义或复杂的应用程序上使用它,但是有一些工具,包括AnalytiX代码谷歌的,即自动生成Java应用程序的单元测试。我还发现了一种商业产品Parasoft's C++Test,它似乎允许生成C++单元测试。

这些应用程序使用启发式方法生成测试用例。我不确定是否有一个框架可以用来生成一个框架,但是您可以查找一些构造。我倾向于关注循环、条件语句(if块、switch/case语句)和异常,并创建强制执行不同执行路径的测试用例。

我不会专注于通过创建框架或模板来加速测试的编写,而是通过改进规范的分析和/或实现以及编写高质量的测试。能够尽早识别哪些测试增加了最大的价值,编写这些测试,然后在以后补上漏洞,将对生产率和质量产生更大的影响。

为了提供更多的宣传,猎鹰在一个项目和写了一篇关于他的经历的短文上试用了CodePro。

票数 5
EN

Software Engineering用户

发布于 2011-10-16 12:17:47

几年前,我编写了一个生成器来加速.NET项目的单元测试。有一个没有单元测试的大型代码库,它的目标是快速增加基本覆盖率。以下是一些可能有帮助的注释:

  • 我的机会是,开发项目的核心框架提供了标准操作和类命名。如果您正在考虑编写您自己的,这样的标准结构将有很大帮助。
  • 如果代码库允许的话,使用data-driven testing非常有帮助。测试框架为每个单元测试创建了一个数据库表来存储测试数据,这样该表中的每一行都是一个单独的测试,并且不需要额外的代码(表示规则)。从这一点开始,实际的测试可以很容易地自动创建或手动输入。
  • 得到的单元测试很简单,但它们至少起到了smoke tests的作用。对于风险较高的地区,还编写了额外的手工测试。

总之,我同意一个通用的解决方案是不切实际的(如果可能的话)。我相信,如果代码库适合测试生成,并且测试框架可以利用它的结构,那么机会就会更大。

(顺便提一句,这里有佩克斯,但它是.NET的)

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/109056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档