如何开始对新旧代码进行单元测试?

2023-12-31

我承认我几乎没有单元测试的经验。我不久前尝试过 DUnit,但放弃了,因为我的应用程序中的类之间存在太多依赖关系。 这是一个相当大的(大约 150 万行源代码)Delphi 应用程序,我们是一个维护它的团队。

目前的测试是由一个在发布之前使用它并报告错误的人完成的。我还在 TestComplete 6 中设置了一些 GUI 测试,但由于应用程序的更改,它经常失败。

Bold for Delphi 用作数据库的持久性框架。 我们都同意单元测试是必经之路,我们计划用 ECO 作为持久性框架在 DotNet 中编写一个新应用程序。

我只是不知道从哪里开始单元测试...... 有什么好的书籍、网址、最佳实践等吗?


嗯,单元测试的挑战不在于测试本身,而在于编写可测试的代码。如果代码写成not考虑测试,那么你可能会遇到很大的困难。

无论如何,如果你可以重构,就进行重构以使其可测试。尽可能不要将对象创建与逻辑混合在一起(我不知道delphi,但可能有一些依赖注入框架可以帮助实现这一点)。

这个博客 http://misko.hevery.com/对测试有很多很好的见解。查看本文 http://misko.hevery.com/2008/07/30/top-10-things-which-make-your-code-hard-to-test/例如(我的第一个建议就是基于它)。

至于建议,请尝试首先测试代码的叶节点,即那些不依赖于其他类的类。它们应该更容易测试,因为它们不需要模拟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何开始对新旧代码进行单元测试? 的相关文章

随机推荐

  • Apiary:将 API 导出为 JSON,以生成客户端代码

    我们都知道养蜂场很强大 或者不是 我认为确实如此 我想知道如何才能更进一步允许用户导出 API 的 JSON 描述 因此开发人员可以编写客户端代码生成脚本 这应该有帮助 http ttezel github io blog 2013 02
  • c中的序列点

    命令式编程中的序列点定义了计算机程序执行中的任何点 在该点处保证先前评估的所有副作用都已执行 并且尚未执行后续评估的任何副作用 这是什么意思 有人可以用简单的话解释一下吗 当序列点发生时 基本上意味着您可以保证之前的所有操作都已完成 在没有
  • 启动投射设备的投射会话

    我有这个用例 检测播放设备并保存其 ID 名称和信息 以自动方式连接到预定义设备并开始投射会话 有一些内容 我研究了 Google Cast API v3 看起来真的很难 在 v2 中 这是可能的 因为发送者应用程序控制了 90 的进程 即
  • 用于压缩连续正整数的 C 库

    我有一个非常常见的问题 即为磁盘中的字符串数组创建索引 简而言之 我需要将每个字符串的位置存储在磁盘内表示中 例如 一个非常简单的解决方案是索引数组 如下所示 uint64 idx 0 20 500 1024 103434 这表示第一个字符
  • 为 Python 函数参数提供额外装饰/元数据的好方法是什么?

    我们正在考虑使用 Python IronPython 但我认为这不相关 为另一个控制设备的应用程序提供某种 宏 支持 我们想用 Python 编写相当简单的函数 它需要一些参数 比如时间 温度和位置 不同的函数将采用不同的参数 主应用程序将
  • 如何从 postgresql sql 表中删除重复行

    date window points actual bool previous bool creation time source 2021 02 11 110 0 6 0 0 2021 02 14 09
  • 无法安装 rvest 软件包

    我需要安装 R 版本 3 1 2 的 rvest 包 2014 10 31 我收到这些错误 checking whether the C compiler supports the long long type no stringi can
  • 背景图像在 iPad 和 iPhone 上不显示

    我想在移动网页中创建一个带有背景的部分 因此我使用了以下 CSS 代码 section1 background url background1 png auto 749px height 749px 背景在 Android Chrome F
  • Angular DatePicker - 多个指令 > [datepicker, datepicker]

    我正在尝试使用 720Kb 日期选择器 https github com 720kb angular datepicker https github com 720kb angular datepicker 使用简单的示例时
  • 如何在批处理文件中提及 C:\Program Files

    我需要从批处理文件调用 C Program Files 目录中的 exe 文件 我们如何在批处理文件中提及目录名称 Program Files 我收到类似 C Program not found 的错误 我认为需要在中间添加 或 但无法得到
  • C# 中的文件和文件夹的递归列表[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我编写此代码是为了在 C 中递归列出文件和文件夹 var filesInTheCurrentDirectory System IO Direct
  • curl 与浏览器的结果不同

    我正在尝试使用curl 从命令行下载以下URL 如果通过浏览器请求相同的 URL 则能够获取图像 但对于curl 服务器终止SSL握手 只是为了使用完全相同的参数 我尝试了 google chrome 和 firefox 的 开发人员工具
  • Rails - 使用 ruby​​gems 安装电子表格 gem 时出错

    我希望能够在 Rails 中处理 Excel 电子表格 所以我正在使用spreadsheet图书馆 但是 当我使用 ruby gems 安装电子表格时 出现异常 Successfully installed spreadsheet 0 7
  • 通过提供邮政编码获取位置名称

    当用户输入邮政编码时 我需要显示位置和城市名称 如何获取对应的位置名称 我会使用像这样的网站 http www zipinfo com search zipcode htm http www zipinfo com search zipco
  • WPF WebBrowser 控件是否支持放大/缩小?

    对于 WPF WebBrowser 控件 有没有办法复制 Internet Explorer 的缩放功能 换句话说 Internet Explorer 具有菜单 视图 gt 缩放 gt 75 可以以 75 的比例呈现网页 有没有办法让嵌入在
  • Android 视图转换动画列表?

    是否有可用于在两个视图之间转换的所有动画的列表 IE 缩放 滑动 脸部等 我似乎无法在 SDK 中或通过搜索 Google 找到完整的列表 此外 是否有任何演示应用程序可以显示所有这些内容 以便我可以评估哪个最适合特定用例 无法创建完整的动
  • 将对象列表作为外键

    如果我有两节课 public class Event public int EventId get set public string EventName get set and public class Dog public int Do
  • 如何验证对 PHP 文件的 AJAX 请求?

    在我的网站上 我有一个注册页面 该页面会发出 AJAX 请求来检查用户名输入后是否可用 该文件名为 check php 与 Registration php 文件位于同一目录中 当数据发布到 check php 时 它将在 MySQL 数据
  • 您网站上的多个 signalR 连接/集线器

    如果我有多个页面可以使用多个集线器类 那么管理此问题的最佳方法是什么 例如 导航到网站中的另一个页面并本质上 重新打开 与上一页上打开的同一集线器类的连接是否不好 我是否正确地认为在一个页面上打开多个集线器连接是可以的 因为它们都统一在一个
  • 如何开始对新旧代码进行单元测试?

    我承认我几乎没有单元测试的经验 我不久前尝试过 DUnit 但放弃了 因为我的应用程序中的类之间存在太多依赖关系 这是一个相当大的 大约 150 万行源代码 Delphi 应用程序 我们是一个维护它的团队 目前的测试是由一个在发布之前使用它