如何在大型项目中进行单元测试

2024-01-06

我们有一个项目开始变大,我们需要在开始重构时开始应用单元测试。将单元测试应用于已存在的项目的最佳方法是什么?我(在某种程度上)习惯从头开始做这件事,我将测试与第一行代码一起编写。当功能已经到位时,我不确定如何开始。我应该开始为存储库中的每个方法编写测试吗?或者我应该从控制器开始?

update:澄清项目的规模..我不太确定如何描述这一点,只能说有 8 个控制器和大约 167 个具有 .cs 扩展名的文件,所有这些都在大约 7 个开发人员个月内完成。


正如您所知,将测试改造到现有项目并不容易。边走边写测试的方法是更好的方法。您的问题是流程和技术之一 - 每个人都必须要求进行测试,否则没有人会使用它们。

我听到并同意的建议是,您不应尝试立即对现有代码库进行测试。你永远不会完成。首先对错误修复流程进行测试 - 每个修复的错误都会进行测试。随着时间的推移,这将开始对现有代码进行测试。新代码必须always当然有测试。最终,您会将覆盖范围提高到合理的百分比,但这需要时间。

我向我推荐的一本好书是有效地处理遗留代码 https://rads.stackoverflow.com/amzn/click/com/0131177052作者:迈克尔·C·费瑟斯 (Michael C. Feathers)。标题并没有真正展示它,但是对现有代码库进行测试是本书的一个主要主题。

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

如何在大型项目中进行单元测试 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 错误:useHref() 只能在 组件的上下文中使用

    当我直接在我的路由器组件中写入我的导航栏组件内容时 它工作正常 但是当我在导航栏组件中写入该内容时 它会生成以下错误 错误 useHref 只能在组件上下文中使用 我在用着 react dom 17 0 2 react router dom
  • 使用 clang 编译时 openmp 无法正确链接

    我已经在 Ubuntu 16 04 上从源代码构建了 clang 4 0 并尝试编译一个简单的 OpenMP 程序 但收到以下错误 tmp test 7f2c7c o In function main home me sf shared t
  • 选择两列之间的日期

    我需要一个 SQL 查询 如果我有两列STARTDATE and END DATE 我想选择日期位于这两个日期之间的所有行 例如 开始日期 1 1 2011 且结束日期 2 2 2011 SELECT FROM table1 WHERE 2
  • Laravel 4 中的通用访问器和修改器

    我知道可以为各个字段定义访问器和修改器 如下所示 public function setSomeAttribute value set the attribute public function getSomeAttribute retur
  • 如何在Java中获取客户端计算机上当前登录用户的用户名?

    当用户 客户端 尝试通过键入 URL 进入应用程序时 我需要获取该计算机的 Windows 登录用户名 我尝试过System getProperty user name 但是当我从其他机器 客户端 访问应用程序时 这仍然显示服务器上登录用户
  • 如何使用本地安装在node_modules中的包中的可执行文件?

    如何在中使用模块的本地版本node js 例如 在我的应用程序中 我安装了咖啡脚本 npm install coffee script 这会将其安装在 node modules咖啡命令是 node modules bin coffee 当我
  • 如何以编程方式从 UIView 获取约束

    我想从 UIView 获取 UILabel 约束 但我无法得到任何约束 我在 CustomView m 中设置约束 如下所示 id initWithFrame CGRect frame self super initWithFrame fr
  • 在 OpenGL3 Core Profile 中使用矩阵作为顶点属性

    我在 OSX 上使用 OpenGL 3 2 Core Profile 我想要进行实例化绘图 glDrawArraysInstanced 其中我为每个实例传递一个矩阵 我的顶点着色器构建得很好 version 150 in mediump v
  • LIKE 与 Linq to Entities

    我知道 Contains 方法确实喜欢LIKE therm the StartsWith 方法确实喜欢LIKE therm 和 EndsWith 方法就像LIKE therm but 有没有办法像下面那样做 Linq to Entities
  • Flutter iOS 崩溃并出现 EXC_BAD_ACCESS 错误

    我正在使用 Flutter 开发一个应用程序 并在物理 iOS 设备 iPhone 7 上测试该应用程序 iOS版本是 15 3 1Flutter版本是 2 10 3 当我测试我的应用程序时 偶尔会发生崩溃 崩溃给出以下错误 它并不总是在同
  • 参数索引超出范围

    尝试使用 nhibernate 更新对象时出现以下错误 我正在尝试更新一个外键字段 有什么想法为什么我可能会收到此错误 我无法从该错误中找出答案 并且我的 log4net 日志也没有给出任何提示 Thanks System IndexOut
  • 是否可以在重构文本中以两栏样式书写?

    我想使用重组文本写一篇研究论文 是否可以采用此类文档固有的两栏样式 我看了看规格 http docutils sourceforge net docs ref rst restructuredtext html但除了使用桌子这将是一个真正的
  • 检测nuxt中元素外部的点击

    我有一个 nuxt 项目 我需要编写一个 click outside 指令 通过它我可以检测元素的外部点击以关闭它们 我该如何实施 答案是在插件中创建一个directives js 文件并将其注册到config nuxt js 文件中 di
  • 使用 SWIFT 解析 PDF

    我想解析一个没有图像 只有文本的 PDF 我正在尝试寻找一些文字 例如搜索字符串 Name 并能够读取 后面的字符 我已经能够打开 PDF 获取页数并循环浏览它们 问题是当我想使用类似的函数时CGPDFDictionaryGetStream
  • Reactjs保存组件的当前状态

    我有组件 A 和组件 B 在组件 A 中 用户可以将过滤器应用于元素列表 并使用侧栏在两个组件之间导航 每当用户单击转到 B 然后返回 A 时 过滤器就会设置回初始状态 保存组件 A 状态的最佳方法是什么 以便当他们返回组件 A 时 他们可
  • 使用 PowerShell 和 Azure CLI 将代码从 GitLab 存储库部署到 Azure Web App

    我想使用 PowerShell 脚本和 Azure CLI 设置从 GitLab 存储库到 Azure 应用程序的持续部署 已经有一个答案可以使用Azure RM 模块和 Windows PowerShell https stackover
  • 对需要带有模式的整数的元素使用 JAXB 生成的类

    我的 XML 架构中有一个元素定义如下
  • python QTconsole 的数据隐藏

    目前我正在制作一个图像身份验证项目 其中我需要借助密钥来验证图像 我将钥匙作为raw input用户通过 IPython 控制台 我想隐藏正在输入的密钥 预期结果 Enter the key or Enter the key nothing
  • pandas 将函数应用于多列和多行

    我有一个数据帧 其行和列 xpos ypos 中具有连续的像素坐标 我想计算连续像素之间每条路径的角度 以度为单位 目前我有下面介绍的解决方案 该解决方案工作正常 并且对于我的文件大小来说足够快 但迭代所有行似乎不是 pandas 的方式
  • 如何在大型项目中进行单元测试

    我们有一个项目开始变大 我们需要在开始重构时开始应用单元测试 将单元测试应用于已存在的项目的最佳方法是什么 我 在某种程度上 习惯从头开始做这件事 我将测试与第一行代码一起编写 当功能已经到位时 我不确定如何开始 我应该开始为存储库中的每个