首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为没有xUnit实现的工具构建自动化单元测试

为没有xUnit实现的工具构建自动化单元测试
EN

Software Engineering用户
提问于 2013-03-05 19:57:58
回答 2查看 389关注 0票数 1

序言

我被自动化单元测试的错误咬死了。我感觉到了它可以提供的代码库的好处和信心。

对于代码中哪些部分值得进行单元测试,我也有合理的直觉。有逻辑的代码,可能是杂乱无章的代码(因为它处理的是一些混乱的需求),您很乐意封装这些代码,这些代码可能有一些奇怪的边缘条件。

不寻常上下文

在我的工作场所,我们利用了一些相当利基的工具。为了论证起见,我可以肯定地看到,这些工具提供了特性和效率,使得它们对于完成特定的工作是必不可少的。

我面临的挑战是,我肯定在这些工具中实现了逻辑,我的直觉说“这应该用单元测试来解决”。

我测试过这些代码..。

  • 以一种丢弃的方式--尝试几个输入来执行代码,直到满足它的效果--这对于将来维护代码的人来说是有缺点的。
  • 以一种较少浪费的但手动的方式编写测试用例和步骤,以便戳出代码以生成输出;使用测试数据;使上述丢弃测试不被丢弃--这保留了对时间的投资,但速度慢,并且取决于人们对测试的了解和运行。
  • 以一种稍微自动化一些的方式--使用脚本来执行代码插入;甚至可以在一定程度上检查输出--这更容易重新运行,但远远不能以一致的方式利用成熟的框架,比如在编写xUnit样式测试时。

虽然进展感觉很好,但我觉得我错过了我已经成为xUnit粉丝的体验。

我到底在处理什么样的语言/平台?

  • 一个类似于SSIS的ETL工具,名为红点数据管理:非开源,因此我将描述它有一些项目,这些工具是通过数据流链接的,有些工具有一些我希望进行单元测试的逻辑。
  • 这是一种合成工具,对于不熟悉的人来说,这是一种接受数据文件并输出打印文件的产品。想象一下XML输入,PDF输出。
  • DOS脚本功能:我保证这是一个好的‘’ol‘风格DOS脚本的真实特性,教程这里
  • (我将把它添加到列表中,而不是严格地说我需要帮助,但是如果我的工具集很难理解) COBOL数据转换,使用CopyBooks来指定平面文件输入和输出的格式,可能会比上面的更清楚。编译后,即使在内部按功能分解,也会产生一个大二进制文件。

实际问题

xUnit样式测试从根本上是针对面向对象语言的吗?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2013-03-07 07:27:29

区别不在于面向对象与否,而在于测试单个函数(“白盒测试”)与完整程序(“黑匣子测试”)。它与其说是单独的情况,不如说是一个连续体,在这个连续体中,各种技术混合在一起,相互匹配。

工具也不是一体式的。测试框架由以下四部分组成:

  • 测试转轮
  • 结果报告
  • 断言的集合
  • (可选)模拟对象框架

这些组件大多是正交的,它们的独立实现可以结合起来,不同类型的组件和每个组件的多个实现。

测试运行程序

找到所有测试用例并执行它们的组件。多个测试运行程序可以通过简单地从另一个运行程序调用一个测试运行程序作为测试用例来组合在一起。可能就像脚本目录上的for-循环一样简单,而这正是在组合不同框架中编写的测试时经常作为顶级运行程序使用的。

您可以在CTestshUnit中找到一些通用的测试运行程序。这两种方法都提供了比较文件中输出的方法。

perl 测试::线束在目录中运行脚本时也可以被视为通用运行程序。perl也非常适合测试外部程序。

,记者

每个单元测试框架都生成失败测试的列表。如果您组合了多个框架,您可以只收集所有单独的报告,或者使用类似亚基测试::线束's“的”点击“来提供很好的统一进度和总结。

断言

这是测试测试代码产生预期结果的方式,并与代码的接口方式有关。

  • 对于各种编程语言中的库,有由相应的xUnit提供的断言。
  • 对于命令行工具,有各种文件比较器。CTestshUnit有一些,但如果需要的话,它们大多很容易自制。
  • 对于交互式命令行工具,有期望 (或Perl变体)。
  • 对于GUI应用程序,有LDTP (linux桌面测试项目,但它们现在也有windows和macos版本)。
  • 我确信我已经看到了一些web应用程序(即浏览器中的应用程序;您通过它们的客户端库来测试服务),但我不记得任何名称。你肯定会在google上找到一些。

模拟工具

这是关于在不设置所有实际依赖项的情况下构建测试环境。例如,设置一个数据库访问层,该层将返回指定的响应集,而不设置实际的数据库等等。

不可能自动化太多,因为您需要提供它应该返回的数据。这往往不是你想要的。也就是说,无论如何,您需要根据实际数据库或其他数据源中的示例数据来测试应用程序,而附加的细粒度模块测试通常是一项回报递减的工作。

我不认为有什么可概括的。对于大多数xUnits来说,有一些东西会为接口生成虚拟实现,但仅此而已。您只需考虑要测试的组件需要什么,以及在本地提供组件的最简单方法。对于与某些web服务通信的内容,您可以在本地运行一些轻量级http服务器。对于使用ODBC (或DBI或其他通用API)的数据库工具,您可以在sqlite上进行测试,即使它通常使用大型服务器等。对于只读取文件的工具,显然只需在合适的测试数据集中复制即可。

票数 2
EN

Software Engineering用户

发布于 2013-03-05 20:18:27

我不完全确定您在这里讨论的是什么类型的工具,或者是什么使它们很难测试。

但它是否值得一看ApprovalTests呢?这是一个跨语言(Java,C#,VB.Net,PHP,Ruby)框架,它位于任何单元测试运行程序下面。它采用的方法是:而不是编写、测试和指定预期的结果,而是编写测试,不指定结果,运行测试,然后显示结果。你批准了。从那时起,每次运行测试时,如果测试结果与批准时相同,那么它就会通过;如果测试发生了更改,则会失败(向您提供一个差异)。

这对于测试不仅仅返回简单的标量结果(集合、XML文档等)的代码是很好的。而且,因为它运行在任何一个主要的单元测试框架下,所以您不会丢失任何关于自动化的工具,等等。

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

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

复制
相关文章

相似问题

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