YAGNI 在编写测试时也适用吗?

2024-04-06

当我编写代码时,我只编写我需要的函数。

这种方法也适用于编写测试吗?

为了安全起见,我应该提前为我能想到的每个用例编写测试,还是应该只为遇到的用例编写测试?


我认为当你编写一个方法时,你应该测试预期的和潜在的错误路径。这并不意味着您应该扩展您的设计以涵盖所有潜在用途 - 将其留到需要时使用,但您应该确保您的测试已经定义了面对无效参数或其他条件时的预期行为。

据我了解,YAGNI 的意思是您不应该开发尚不需要的功能。从这个意义上说,您不应该编写一个测试来促使您开发不需要的代码。不过,我怀疑这不是您要问的。

在这种情况下,我更关心的是您是否应该编写涵盖意外用途的测试 - 例如,由于传递 null 或超出范围的参数而导致的错误 - 或者重复仅在数据方面有所不同的测试,而不是在功能方面有所不同。对于前一种情况,正如我上面指出的,我会说是的。您的测试将记录您的方法在出现错误时的预期行为。这对于使用您的方法的人来说是重要的信息。

对于后一种情况,我不太能给你明确的答案。您当然希望您的测试保持 DRY —— 不要编写一个简单地重复另一个测试的测试,即使它有不同的数据。或者,除非您运用数据的边缘情况,否则您可能不会发现潜在的设计问题。一个简单的例子是计算两个整数之和的方法:如果传递它会发生什么maxint作为两个参数?如果您只有一次测试,那么您可能会错过这一行为。显然,这与上一点有关。只有您才能确定何时确实需要进行测试。

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

YAGNI 在编写测试时也适用吗? 的相关文章

  • Moq - 是否可以在不使用 It.IsAny 的情况下设置模拟

    我一直使用 Moq 进行单元测试 有时我会嘲笑有很多参数的方法 想象一下这样的方法 public class WorkClient public void DoSomething string itemName int itemCount
  • 为什么尝试使用 Hamcrest 的 hasItems 的代码无法编译?

    为什么这个不能编译 哦 怎么办 import static org junit Assert assertThat import static org junit matchers JUnitMatchers hasItems ArrayL
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • R testthat 单元测试数据和辅助函数约定

    我正在编写一个 R 包 并使用 testthat 进行单元测试 我的许多单元测试都是为了测试适用于我的包特定对象的功能 对于这些测试 我创建了一个辅助函数来设置模拟对象 我还有一些其他辅助函数来减少单元测试中的代码量 目前这些辅助函数在我的
  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • RubyMine 不能使用 Guard 吗?

    由于某些无法解释的原因 RubyMine 会自动保存您所做的每一个更改 因此每次击键都会触发 Guard 运行您的测试 最可笑的是 显然没有办法禁用这个自动保存 功能 我只是想知道 RubyMine 似乎是 Rails 开发人员中非常流行的
  • “单词的正则表达式”(语义替换)-任何示例语法和库吗?

    我正在寻找在给定过程语言的情况下对单词而不是字符进行正则表达式样式转换的常用技术的语法示例 例如 为了追踪复制 人们可能想要创建一份具有相似含义但具有不同单词选择的文档 我希望能够简洁地定义这些可以应用于文本流的可能的转换 例如 快速地no
  • Django:出于测试目的阻止互联网连接

    我想确保我的单元测试不会尝试连接到互联网 有没有办法在连接时引发异常 有一个类似的问题Python 出于测试目的阻止网络连接 https stackoverflow com questions 18601828 python block n
  • C# 模拟接口与模拟类

    我是 net 中的最小起订量框架的新手 根据我的在线研究 似乎有两种方法可以使用这个框架 要么模拟接口 要么模拟具体类 似乎在嘲笑具体类时 只有virtual方法可以被嘲笑 就我而言 我只想模拟实现接口的类的几个方法 例如 如果我们有以下内
  • 莫基托。验证方法参数是特定类

    我有一个方法 void putObject
  • PHP 启动:运行单元测试时无法加载动态库

    当我尝试运行单元测试时 出现此错误 PHP 警告 PHP 启动 无法加载动态库 bz2 尝试过 xampp php ext bz2 找不到指定的模块 xampp php ext php bz2 dll 找不到指定的模块 在未知的第 0 行
  • 获取测试用例中的 BOOST TEST 测试套件名称

    我在用着BOOST TEST我想知道是否有办法找出test suite从里面test case 我知道我能找到test case的名字由 boost unit test framework current test case p name
  • Spring @ContextConfiguration

    我正在运行下一个测试 import static org junit Assert assertEquals import org junit Test import org junit runner RunWith import org
  • 如何对我的自定义验证属性进行单元测试

    我有一个自定义的 asp net mvc 类验证属性 我的问题是如何对其进行单元测试 测试类是否具有该属性是一回事 但这实际上并不能测试其中的逻辑 这就是我想测试的 Serializable EligabilityStudentDebtsA
  • 我的单元测试 ReSharper 装订线图标未显示

    我已经安装了 ReSharper 4 1 和 Gallio 3 0 5 但没有获得单元测试的装订线图标 测试似乎在测试资源管理器中运行良好 但代码中的测试旁边没有图标 可能是什么原因造成的 我之前安装了 MbUnit 2 4 ReSharp
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 过程式编程与 OOP 的开发成本?

    我有相当深厚的 OO 背景 OOD 和 OOP 的好处对我来说是第二天性 但最近我发现自己在一家与过程编程习惯相关的开发商店 实现语言具有一些 OOP 功能 但它们没有以最佳方式使用 更新 每个人似乎对这个话题都有自己的看法 我也是如此 但
  • 如何在单元测试中模拟 subprocess.call

    我使用的是 python 3 3 我必须测试一个使用的方法call来自 subprocess py I tried subprocess call MagicMock with patch subprocess call as TU cal
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • Spark scala 模拟 Spark.implicits 用于单元测试

    当尝试使用 Spark 和 Scala 简化单元测试时 我使用 scala test 和mockito scala 以及mockito Sugar 这只是让你做这样的事情 val sparkSessionMock mock SparkSes

随机推荐

  • 如何使用scala从apache Spark中的kafka主题读取json数据

    我是新的 Spark 您能否让我知道如何使用 scala 从 apache Spark 中的 kafka 主题读取 json 数据 Thanks 最简单的方法是使用 Spark 附带的 DataFrame 抽象 val sqlContext
  • 确保从父 CRTP 类派生的类实现功能

    Brief 我想确保派生类实现父 CRTP 类中的函数所需的成员函数 Detail 我有一些这样的代码 class Base public class Params public virtual Params virtual void my
  • 应用内计费安全

    我已经完成了在应用程序计费 v3 中使用的应用程序的开发 我的应用程序是一个考试帮助应用程序 其中包含插入数据库的问题列表 让我担心的是安全性 因为除了 proguard 之外几乎没有其他东西了 我的应用程序查询已购买商品的库存 因此存储购
  • 无法检测数据库类型

    我正在尝试使用创建一个 Spring Boot 应用程序sqljdbc4 https mvnrepository com artifact com microsoft sqlserver sqljdbc4具有此配置的驱动程序 spring
  • laravel Eloquent 模型更新事件未触发

    圣诞快乐伙计们 我是 Laravel 的新手 当我尝试使用服务提供者和模型事件来记录更新信息时 有一个初学者的问题 正在关注在线文档 https laravel com docs 5 3 eloquent events https lara
  • 如何使用 GWT Designer 配置 Ext GWT?

    我在使用 GWT Designer 配置 GXT 时遇到问题 我拥有 Eclipse GWT 插件和 GXT 的所有新版本 但无法配置 GXT 以与 GWT Designer 一起使用 我设置了我的项目 以便可以编译我的 GXT 项目并在浏
  • 当 Visual Studio 具有焦点时(或任何以管理员身份运行的应用程序),keybd_event 和 PostMessage win32 不起作用

    这是我使用过的一个程序 与旧的 XP 时代相比进行了许多更改 这是一个命令行程序 可以更改媒体应用程序 Spotify vlc mediaPlayer 中的曲目 就像带有下一个 上一个曲目按钮的键盘一样 目前我使用的是微软自然键盘 它没有这
  • sphinx 使用 Latexpdf 删除 pdf 中的章节标题?

    我使用 Latexpdf 和 sphinx 生成从 rst 到 pdf 的文档 如何删除每章之前的章节标题 CHAPTER ONE 如中所述狮身人面像文档 http sphinx doc org config html你可以改变latex
  • 升级到 ubuntu 11.10 unity 后,monodevelop 中的 Gtk# 不再工作

    我有一些带有 GTK 用户界面的 monodevelop 程序 可以在 ubuntu 11 04 中顺利运行 无需统一 我已经统一升级到ubuntu 11 10 现在我收到以下错误 找不到类型或命名空间名称 Gtk 您是否缺少程序集引用 事
  • 在 C++ 中按值传递临时结构的简单方法?

    假设我想将一个临时对象传递给一个函数 有没有办法用 1 行代码和 2 行代码来使用结构来做到这一点 通过一堂课 我可以做到 class func TestClass 5 7 given class TestClass private int
  • 奇怪的 SimpleXML 问题 - 无法按名称引用节点?

    我正在尝试解析一个有效的远程 XML 文件 xml simplexml load file http feeds feedburner com HammersInTheHeart format xml 根元素是feed 我试图通过以下方式获
  • 底层提供程序在 Open 时失败

    我创建了 3 个 Ajax 进程来同时运行以下代码 但其中一个进程抛出消息所示的异常 底层提供商在 Open 上失败 try orderRepository orderRepo new orderRepository get context
  • 以角度方式将依赖服务注入到父类

    我有课parent and child The child类扩展parent 我需要 Inject注射类service to parent因为所有child正在使用它 我怎样才能做到呢 您可以从父级注入任何服务或类Injector类 你需要
  • Nestjs:即使正文验证失败也会上传图像

    首先 我为我糟糕的英语表示歉意 我有一个接受 PUT 请求的方法 它接收一个文件和 BlogModel 当我从前端提交表单并且 BlogModel 的验证失败时 文件仍然会上传 main ts import NestFactory from
  • 使用 HttpServletRequestWrapper 进行复制后缺少必需的请求正文

    在我的项目中 我有一组 api 调用 应通过某些常见验证集进行过滤 在这种情况下 我必须在请求到达 REST 控制器之前拦截该请求 读取请求正文 进行验证 如果请求通过验证 则将其传递给控制器 自从HttpServletRequest不能多
  • Python 请求库给出错误“远程端关闭连接而无响应”

    我正在请求库的帮助下进行后调用 import time def retry on connection errors url data data consists of dictionary with 20 key value pairs
  • node.js,express,如何从post请求中的body表单数据中获取数据

    我有一个简单的 Node js 应用程序 我想从用户那里获取帖子正文 app js var express require express var app express app use express json app post api
  • 使用 MediaTracker 在 Swing 应用程序中缓存图像

    我有一个基于 Swing 的金融代码 它将显示价格变动的金融符号以及每个柜台 公司向上或向下的箭头 此股票行情指示器上可以有很多计数器 最多 100 个 并查看是否需要缓存图像符号以提高性能 我尝试过遵循这个article http www
  • 绘制 4d 数据

    我有 4 个维度的点 我们称它们为 v w y z 我想将其可视化 我的计划是有两个正方形 v x w y x z 彼此相邻 然后将每个点绘制两次 给定两点 1 1 1 3 2 2 2 2 我设想这样的事情 给定一小组点 我可以使用不同的颜
  • YAGNI 在编写测试时也适用吗?

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