NUnit 最佳实践

2024-02-18

环境:(Visual Studio Professional 2008 中的 C# WinForms 应用程序)

我一直在挖掘有关 NUnit 最佳实践的指导。作为一个在相对孤立的环境中工作的独立程序员,我希望这里的集体智慧可以帮助我。

斯科特·怀特(Scott White)有一些很好的起点here http://scottwhite.blogspot.com/2008/05/nunit-best-practices.html但我不确定我是否完全同意他所说的一切——尤其是第 2 点。我的直觉告诉我,测试越接近正在测试的代码,就越有可能获得完整的测试覆盖率。在 Scott 博客文章的评论中,有人认为仅测试公共接口是最佳实践,但我认为测试框架不是典型的类使用者。

您可以推荐哪些 NUnit 最佳实践?


如果第 2 点,你的意思是“每个解决方案的 bin 文件夹”——我可以理解你的观点。就我个人而言,我只会添加对每个测试项目的引用。另一方面,如果您的意思确实是(1b)“不要将测试与代码放在同一个程序集中”,我衷心同意他的观点,但不同意您的观点。您的测试应该与生产代码不同,以增强代码的清晰度和组织性。将测试类分开可以帮助下一个程序员更轻松地理解它。如果您需要在测试中访问内部结构——而且您可能会因为内部方法对于程序集是“公共”的,您可以在 Assembly.cs 文件中使用 InternalsVisibleTo 构造。

我也建议,一般来说,仅对代码的公共接口进行单元测试就足够了。如果做得正确(使用 TDD),代码的私有方法将只是对以前的公共代码的重构,并且通过公共方法将具有足够的测试覆盖率。当然,这是指导方针而不是法律,因此有时您可能想测试私有方法。在这些情况下,您可以创建一个访问器并使用反射来调用私有方法。

我提出的另一个建议是同时使用单元测试和代码覆盖率。代码覆盖率可以作为一种有用的启发式方法来确定何时需要更多测试。缺乏覆盖范围应作为指导来指示哪里可能需要更多测试。这并不是说您需要 100% 的覆盖率——某些代码可能足够简单,不需要进行单元测试(例如自动属性),并且您现有的测试可能不会触及它们。

我对这篇文章有几个问题。最大的可能是单元测试缺乏对数据库的抽象。可能有一些集成测试需要针对数据库进行测试——也许在测试触发器或约束功能时,如果您无法说服自己它们的正确性。不过,总的来说,我认为您应该将数据访问实现为接口,然后在单元测试中模拟实际实现,以便不需要实际连接到数据库。我发现我的测试运行得更快,因此当我这样做时我会更频繁地运行它们。构建“假”数据库接口可能需要一些时间,但只要您坚持使用相同的数据访问设计模式,就可以重复使用。

最后,我建议使用 nUnit测试驱动.Net http://testdriven.net/- 无论您是在进行 nUnit 还是 MSTest,这都是一个非常有用的插件。使用右键单击上下文菜单可以非常方便地运行或调试测试。

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

NUnit 最佳实践 的相关文章

  • C 编程和 TDD

    测试驱动开发仅限于面向对象吗 或者将它与过程语言结合使用是否可能 有用 接下来的几周我必须开始一个更大的 C 项目 我正在考虑如何开发 TDD 是一个design范例 因此不依赖于任何特定的编程范例 简而言之 在编写代码之前先为代码编写测试
  • 在代码中与在脚本中生成集成测试数据[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这个问题很可能是基于意见的 但我确信 有确凿论据支持的观点将为明智的决策铺平道路 我确实喜欢使用 Autofixture 生成数据库状态 我真诚
  • 使用await时SynchronizationContext不流动

    我们计划在 MVVM 视图模型中使用 async await 但在单元测试此代码时遇到了难题 当使用 NUnit 和手写模拟来传递消息时 我们正在丢失当前的SynchronizationContext 最好用以下小型复制示例代码来展示 Te
  • 您如何使用 TDD 来划分班级?

    我觉得自己对TDD相当熟练 甚至在公司里被认为是 TDD专家 但尽管如此 还是有一些情况我觉得不知道如何正确处理 所以我想听听别人的意见 我的问题如下 尽管一般来说 TDD 帮助我思考类的核心职责 并将所有其他职责提取到依赖类中 但有些情况
  • NUnit 与 Debug.Assert 冲突

    我正在使用 NUnit 为我的同事编写的库编写单元测试 他的库包含大量在无效输入时触发的 Debug Asserts 当我编写单元测试并向他的库提供无效输入时 他的 Debug Assert 会弹出一个消息框 抱怨输入错误 我觉得他的库对无
  • 优秀软件设计和实现的示例[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望这不是重复的 您遇到过的设计和实施最扎实的软件系统 框架 应用程序是什么 似乎 TDD SOLI
  • 如何确定 rspec 控制器测试的主题?

    所以除了好奇之外 我没有什么充分的理由需要知道这一点 最好的理由 但我不确定这里发生了什么 背景 我正在研究 RSpec 书并更新示例 第 24 章 Rails 控制器有一个消息控制器的测试 spec controllers message
  • 使用TDD在Java中开发文件遍历代码

    我必须实现一些代码来遍历目录结构并返回找到的文件列表 要求非常简单 给定一个基本目录 查找其中的所有文件 不是目录本身 如果找到目录 请重复步骤 1 我想使用 TDD 开发代码 当我开始编写测试时 我意识到我在嘲笑班级File 这样我就可以
  • 如何在powershell中进行TDD和单元测试?

    随着微软将 powershell 强加到所有新的服务器产品中 我开始 不情愿地 认为我需要认真对待它 认真对待 的一部分是 TDD 您是否找到了对 Power shell 脚本进行单元测试的好方法 我找到了嘲笑的样本极客噪音先生 http
  • TDD 新手:是否有带有测试的示例应用程序来展示如何进行 TDD?

    我真的很想进入 TDD 开发 但我不知道从哪里开始 我认为 查看代码并了解他们如何编写测试并使类可测试 这样我会更容易消化并开始使用自己 有谁知道任何示例或小型开源C 包含单元测试的应用程序 对于沙卡尔佩什来说 我会推荐 ObjectMen
  • 如何在 IHttpModule 中测试 HttpApplication 事件

    我在写信HttpModule并且需要测试它 我正在使用C NET4 5 2 NUnit and Moq 我想测试的方法是Context BeginRequest public class XForwardedForRewriter IHtt
  • “自动测试/rails [...]不[...]存在。正在中止”

    我发现自动测试已停止工作 autotest loading autotest rails Autotest style autotest rails doesn t seem to exist Aborting 根据这篇博文 http ww
  • YAGNI 在编写测试时也适用吗?

    当我编写代码时 我只编写我需要的函数 这种方法也适用于编写测试吗 为了安全起见 我应该提前为我能想到的每个用例编写测试 还是应该只为遇到的用例编写测试 我认为当你编写一个方法时 你应该测试预期的和潜在的错误路径 这并不意味着您应该扩展您的设
  • 关于私有方法单元测试的问题

    在 MSTest 中 Shadowing 属性可帮助您对另一个程序集中的私有方法进行单元测试 这是相关链接 VS 生成单元测试时使用的 Shadowing 属性是什么 https stackoverflow com questions 34
  • TDD 的 JavaScript 单元测试工具

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我研究并考虑了许多 JavaScript 单元测试和测试工具 但一直无法找到合适的选项来
  • 使用假 DbContext 和 Autofixture 以及 Moq 进行测试

    所以请遵循这个例子 example http romiller com 2012 02 14 testing with a fake dbcontext 以及如何制作一个假的 DBContext 来测试我的测试 使用这个工作正常 Test
  • 运行单元测试时如何禁用 PostSharp?

    我希望我的 nunit 测试不应用任何 PostSharp 方面 这样我就可以单独测试我的方法 这可以在测试夹具设置中以某种方式完成 还是只能在每个项目级别上完成 您可以在测试版本上设置 SkipPostSharp 标志 这样它就不会首先编
  • 断言某个方法仅被调用一次

    我想断言一个方法只被调用一次 我正在使用 RhinoMocks 3 5 这是我认为可行的 Test public void just once var key id of something var source MockRepositor
  • Python TDD 目录结构

    Python 中是否有用于 TDD 的特定目录结构 教程讨论测试的内容 但不讨论测试的位置 通过研究 Python Koans 怀疑它是这样的 project main program py This has main method sta
  • 当 TestCase 包含数组时,NUnit 无法识别该 TestCase

    这是我在 NUnit 中遇到的非常简单但烦人的行为 我有一些这样的测试 Test TestCase 1 2 hello TestCase 3 5 goodbye public void MyClass MyMethod int a int

随机推荐

  • 如何在 HAML 中执行 if/else 而不重复缩进代码

    根据用户是否登录 我想打印不同类型的 body标签 这就是我目前的做法 if defined user body data account user account h1 Welcome all my content else body h
  • 在 Docker 容器中运行时,Flask_oidc 给出“Errno 99 无法分配请求的地址”

    Goal 从 Docker 容器中运行的 Flask 应用程序使用 OIDC 背景 我正在使用 Flask 构建一个 Web 应用程序 并希望使用 Keycloak 来提供访问权限 为此 我使用 Python 库flask oidc 所有服
  • 在不使用环回网络的情况下将数据包转发到同一主机中的服务

    我有这个 libnetfilter queue 应用程序 它根据某些 iptables 规则从内核接收数据包 在直接讨论我的问题之前 我提供了一个示例可行代码和其他工具来设置测试环境 以便我们的问题定义和可能的解决方案可以更加准确和稳健 以
  • Java Byte.parseByte() 错误

    我的代码中有一个小错误 我一生都无法弄清楚 我有一个字符串数组 它们是二进制数据的表示 从十六进制转换后 例如 一个索引是 1011 另一个索引是 11100 我遍历数组并用 0 填充每个索引 以便每个索引都是八个字节 当我尝试将这些表示形
  • C# TPL 数据流 - 完成不起作用

    此代码永远不会到达最后一行 因为完成不会从 saveBlock 传播到 sendBlock 我究竟做错了什么 var readGenerateBlock new TransformBlock
  • 如果同时使用 Objectify 6.0 和 ,则会出现“DatastoreException:请求缺少必需的身份验证凭据”

    在部署在激活了 java 8 的标准环境上的 App Engine 应用程序上 如果我同时使用 Objectify 6 0 和标签 则会出现以下异常
  • tcmalloc 不生成堆栈跟踪

    我正在运行与 tcmalloc 链接的二进制文件 它没有生成堆栈跟踪 它正在检测泄漏 The output says The 1 largest leaks Leak of 1401231 bytes in 82093 objects al
  • 线程“main”中的异常 java.lang.NoClassDefFoundError: com/google/common/base/Preconditions

    在 Eclipse 中运行 java Map Reduce 应用程序时 遇到以下异常 我也将 commons logging 1 2 jar 文件包含在我的构建路径中 但仍然在下面 我是 hadoop 新手 请帮助我 Exception i
  • 暂停 jQuery 中的默认事件

    我试图延迟 jQuery 脚本中的一个或多个默认事件 上下文是 我想在用户执行某些操作 主要单击 时在默认操作触发之前几秒钟向用户显示一条消息 伪代码 用户点击链接 按钮 元素 用户收到一条弹出消息 指出 您正在离开网站 消息在屏幕上保留
  • ASP.NET MVC 路由 - 尝试在 URL 中包含名称

    我目前有以下路线 routes IgnoreRoute resource axd pathInfo routes IgnoreRoute resource gif pathInfo MvcRoute MappUrl controller a
  • Angular 8 - 如何从回调路由中的url获取数据

    如何获取access tokenkeycloak服务器到我的授权组件 授权 URL 如下所示 回调网址位于http localhost 4200 auth http localhost 4200 auth 这是组件 import Compo
  • Android Google 登录按钮和 Facebook sdk 4+ 按钮布局

    我正在开发一个使用的应用程序google https developers google com branding guidelines sign in button and facebook https developers facebo
  • SignalR 和浏览器连接限制

    我用 SignalR 制作了一个简单的应用程序进行测试 当页面加载时 它会调用服务器上的函数 该函数然后调用在屏幕上打印消息的客户端函数 我这样做是为了检查客户端和服务器功能是否正常工作以及 SignalR 通信是否正常 我的问题是 如果我
  • Colab 突然无法浏览目录

    过去几个月我一直在使用 Google Colab 在连接驱动器和输入 shell 命令时没有出现任何问题 然而今天突然出现了一个错误 我找不到任何解决办法 Colab 似乎神奇地无法浏览目录 对于 cd pwd mkdir 等目录的任何 b
  • WooCommerce - 登录后重定向到上一页

    我一直在寻找可以处理它几个小时的插件和片段 但没有成功 每个答案都不适合我 我的菜单中有 登录 链接 可通往 WooCommerce 我的帐户 页面 其中显示登录表单 我希望客户在成功登录后返回到单击 登录 链接的页面 wp get ref
  • Highcharts - 如何更新角度系列?

    我在柱形图中更新系列数据时遇到问题 一开始 当我的模型为空时 我设置一个空数组作为系列 然后在ngOnchanges方法我映射我的modelData到匹配的格式 不幸的是 图表仍然是空的 这是我的组件代码 export class Colu
  • PHP 验证 PayPal 捐赠

    我如何验证贝宝捐款 在用户面板中我有一个捐赠按钮 一旦有人真正捐款 我就想为他做点什么 但我不知道如何检查用户是否实际捐赠或只是单击了捐赠按钮 看看 Paypal 的IPN https www paypal com ipn 即时付款通知 当
  • 长时间运行 Jupyter 笔记本/实验室?

    我在 ec2 实例上的 tmux 会话中运行 Jupyter 我有运行时间非常长的单元格 但是当我关闭浏览器或笔记本电脑盖子时 笔记本电脑不再写入输出单元格 并且可能会使 python 内核崩溃 这是我在远程实例上启动实验室的方式 jupy
  • 如何在 Prometheus 中推送 Kubernetes 指标而不是拉取?

    我已经在我们的基础设施中配置了 Prometheus 进行监控 在我们的基础设施中 我们有一个正在运行的 EKS 集群 我必须在 Prometheus 中收集 EKS 指标 默认情况下 Prometheus 采用基于拉动的机制 这里我有一个
  • NUnit 最佳实践

    环境 Visual Studio Professional 2008 中的 C WinForms 应用程序 我一直在挖掘有关 NUnit 最佳实践的指导 作为一个在相对孤立的环境中工作的独立程序员 我希望这里的集体智慧可以帮助我 斯科特 怀