如果必要的单元测试失败,我可以使单元测试不确定吗?

2024-02-24

考虑对字典对象进行单元测试。您可能编写的第一个单元测试只是将项目添加到字典并检查异常。下一个测试可能类似于测试计数是否准确,或者字典是否返回正确的键或值列表。

然而,后面的每种情况都要求字典首先能够可靠地添加项目。如果添加项目的测试失败,我们不知道后面的测试失败是因为他们正在测试的内容实施不正确,还是因为我们可以可靠地添加项目的假设不正确。

我是否可以声明一组单元测试,如果其中任何一个失败,则导致给定的单元测试不确定?如果不是,我应该如何最好地解决这个问题?我是否设置了错误的单元测试,导致我陷入了这种困境?


这并不像看起来那么难。让我们稍微改一下这个问题:

如果我测试我的代码片段需要System.Collections.Generic.List<T>.Add工作,当有一天微软决定破产时我该怎么办.Add on List<T>?我是否会根据此进行测试以获得不确定的结果?

上述问题的答案是显而易见的;你不。你让他们失败的原因很简单——你的假设失败了,并测试should失败。这里也是一样。一旦你的添加测试开始工作,从那时起你假设添加作品。您不应以与第三方测试代码不同的方式对待您的测试代码。一旦它被证明有效,你就会认为它确实有效。

另一方面,您可以利用称为守卫断言。在删除测试中,在排列阶段之后,您引入了额外的断言阶段,该阶段验证您的初始假设(在本例中 - 添加正在工作)。有关此技术的更多信息可以找到here https://stackoverflow.com/q/1021007/343266.

添加一个示例,NUnit 使用上面伪装在名称下的概念。这正是您所提议的(但它似乎与数据驱动测试而不是通用实用程序更相关):

该理论本身负责确保提供的所有数据都满足其假设。它通过使用 Assume.That(...) 构造来完成此操作,其工作方式与 Assert.That(...) 类似,但是不会导致失败。如果特定测试用例不满足假设,则该用例返回不确定的结果,而不是成功或失败。

然而,我认为马克·西曼在回答中指出 https://stackoverflow.com/a/1021037/343266我链接的问题最有意义:

对于给定的测试用例,可能需要满足许多先决条件,因此您可能需要多个 Guard Assertion。不必在所有测试中重复这些测试,而是为每个先决条件进行一个(且仅一个)测试,可以使您的测试代码更易于维护,因为这样可以减少重复。

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

如果必要的单元测试失败,我可以使单元测试不确定吗? 的相关文章

  • 如何模拟类路径上属性文件的存在?

    这肯定是一个常见问题 我有一个像这样的属性文件my settings properties由应用程序类读取 当我编写测试类时 它需要测试可能存在的不同场景my settings properties为了确保最大的代码覆盖率 例如空属性文件
  • 单元测试中的多个断言[重复]

    这个问题在这里已经有答案了 我刚刚读完 Roy Osherove 的 单元测试的艺术 我正在努力遵循他在书中提出的最佳实践 最佳实践之一是不要在测试方法中使用多个断言 这条规则的原因对我来说相当清楚 但它让我想知道 如果我有这样的方法 pu
  • Grails 测试中的模拟配置

    在 Grails 2 0 X 之前 可以使用mockConfig测试扩展的基类提供的方法 然而 在 Grails 2 0 X 中 建议测试类使用 TestFormixin 而不是扩展基类 这个 mixin 似乎没有提供任何与mockConf
  • C# 压力测试 - 模拟对给定共享资源的多次访问

    如何在 C 单元测试中模拟 压力测试 100 个用户访问给定的共享资源 例如数据库 假设您正在访问真实的数据库 那么您就处于集成测试的范围内 最简单的方法是从多个线程访问资源 例如 Test public void SimpleStress
  • 单元测试:独立测试与代码重复(DRY)

    我正在迈出单元测试的第一步 并且不确定在单元测试中似乎相互矛盾的两个范式 即 每个单元测试都应该是独立的 不依赖于其他单元测试 不要重复自己 更具体地说 我有一个要测试的导入器 导入器具有 导入 功能 获取原始数据 例如 从 CSV 中取出
  • JUnit 集成测试的“IT.java”文件名后缀(而不是“Test.java”)是否是一种约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我习惯于用一个名称来命名我的 JUnit 集成测试 Test java最后例如DatabaseConnectionTest java并将它们放在
  • PHPUnit - 使用配置文件时“未执行测试”

    问题 为了提高代码质量 我决定尝试学习如何使用单元测试来测试我的代码 而不是使用平庸的最佳测试解决方案 我决定使用 Composer 安装 PHPUnit 作为个人库 它可以让我实现常见的数据库功能 起初我没有 PHPUnit 的配置文件
  • QUnit 不会运行测试

    我刚刚开始使用 QUnit 并遇到问题 我目前正在使用 TypeScript 它是一个 JavaScript 编译器 我在与我的主要课程结构平行的课程中进行测试 在每个类中 我都有一个名为 runTests 的函数 为了执行这些测试 我循环
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 如何运行传递给模拟方法的 lambda 函数?

    我想知道是否可以运行作为参数传递给模拟函数的 lambda 函数 并在调用模拟方法时运行它 我正在使用 Mockk 我想象代码是这样的 class DataManager fun submit lambda Int gt Unit val
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 何时使用模拟框架?

    因此 我正在使用模拟框架 Moq 进行单元测试 并且想知道何时应该使用模拟框架 以下两个测试之间的优点 缺点是什么 public class Tests Fact public void TestWithMock Arrange var r
  • 如何处理 MSTest 中的 currentDomain.UnhandledException

    我尝试根据答案实施解决方案单元测试时如何处理其他线程引发的异常 https stackoverflow com a 934604 518530 但我仍然不明白在处理程序中要做什么 假设我有一个测试 TestMethod void Test
  • 模拟比存根更好吗?

    不久前我读到了模拟不是存根 http www martinfowler com articles mocksArentStubs htmlMartin Fowler 的文章 我必须承认我有点害怕外部依赖性增加的复杂性 所以我想问 单元测试时
  • AttributeError:“模块”对象没有属性“TestCase”

    我有名为 test py 的unittest 文件 My code import unittest class Test unittest TestCase def myTest self a 1 self assertEqual a 1
  • 单元测试术语概述(存根与模拟、集成与交互)?

    我在我的项目中使用了更多的单元测试 并阅读了我可以在网上找到的所有信息 并且对很多术语感到困惑 因此 我可能在对话和谷歌搜索中错误地使用了这些术语 有人可以概述所有单元测试术语 例如 假 类型以及测试类型 交互与集成 吗 当谈到模拟 假货和
  • 如何确定我们是否正在 Dart (Flutter) 中运行单元测试

    在 Flutter Dart 中从单元测试调用函数时 如何确定我正在运行单元测试还是实际应用程序 如果在单元测试中 我想传递不同的数据 您可以使用以下内容来检查您是否正在运行测试 Platform environment containsK
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca

随机推荐

  • 对广播接收器进行单元测试?

    这是我项目中的一个 BroadcastReceiver 我正在对其进行单元测试 当用户拨打电话时 它会获取电话号码 并设置启动新活动的意图 并传入电话号码 public class OutgoingCallReceiver extends
  • sonar-maven-plugin:无法设置sonar.sources src / main / resources

    我的 maven sonar 设置有问题 我需要将所有项目文件包含在src 主 java and src 主 资源这样 SonarQube 将显示我所有文件的结果 但排除其中的一些文件src main resources static 文件
  • 我如何理解 rbind 的警告?

    如果我有两个具有相同列名的 data frame 我可以使用 rbind 来创建单个数据框 但是 如果我有一个是一个因子 另一个是一个整数 我会收到如下警告 警告消息 在 lt factor tmp ri 值 c 1L 1L 0L 0L 0
  • Eclipse、Android 插件、安装新软件只是显示“待处理”

    我正在尝试按照此处的说明安装适用于 Eclipse 的 Android 插件 32 位 Windows 7 Eclipse Java Indigo 版本 迈克 普拉特 http www mikeplate com 2009 10 27 ge
  • 如何将数据随机分成三个相等大小?

    我有一个包含来自三个不同项目的 9558 行的数据集 我想将这个数据集随机分成三个相等的组 并为每个组分配一个唯一的 ID 以便Project1 Project 2 Project3变成Project1 Project2 and Proje
  • postgresql:将 bytea 转换为 bigint

    我必须将查询的 bytea 条目转换为 bigint 这怎么可能做到呢 更多信息 我有一个休眠存储库 如下所示 Query value update Sample Table set other id 1 where id 2 native
  • r 中字符变量名称的循环

    我有一个变量列表 例如 a1 a2 a3 然后我想对这些变量进行循环 例如赋值 我尝试了粘贴 它只给出了像 a1 这样的字符 这不是我真正想要的 谁能提供解决方案吗 我们可以用mget获取 a 中的值list lst lt mget pas
  • 将 csv 转换为 JSON 树结构?

    我读了这些问题 csv数据到d3中的嵌套json树 https stackoverflow com questions 19043561 csv data to nested json tree in d3 在python中从csv列表创建
  • 使用 @DefaultProperty 时“元素未定义默认属性”

    我正在尝试创建一个自定义 JavaFX 元素以在 FXML 中使用 但是当FXMLLoader尝试解析它 它抛出一个异常 指出 javafx fxml LoadException 元素未定义默认属性 然而 经过一些研究后 我相信我正确地定义
  • SQLite动态查询

    我有一个 SQLite 数据库 我想做的是用户选择一个过滤器 例如 我有一个书籍数据库 用户只想查看 阿加莎克里斯蒂的书籍 中的数据 因此 我制作了一个带有选择选项的微调器 然后有意将所选字段传递给执行查询选择的另一个活动 我的问题是 如何
  • 将内联 SQL 转换为存储过程

    我正在开发现有的 ASP NET 应用程序 当前的应用程序使用了大量的内联查询 现在他们只想将所有查询重写为存储过程 我的问题是 这些查询非常 动态 并且查询是根据不同的条件连接起来的if else条件 例如 string query Se
  • 为什么 RestTemplate 会消耗过多的内存?

    Question 为什么 Spring 的 RestTemplate 使用过多的堆 特别是G1 Old Generation 发送文件时 Context 我们观察到休息模板 https docs spring io spring frame
  • LINQ 中的条件Where 子句

    假设我在网格中显示数据 并且有许多文本框用于过滤数据 员工 ID 的文本框 如果员工 ID 文本框为空 则不会添加 where 子句 但如果不为空 则将添加 where 子句 如果工资文本框有值或员工姓名文本框有值 我们可以以同样的方式过滤
  • 经典蓝牙 (2.1) 设备可实现的最小数据包延迟是多少?

    我正在使用 RN42 http www microchip com wwwproducts en RN42 http www microchip com wwwproducts en RN42 蓝牙模块以 115200 波特率 UART S
  • gem install Rails 构建错误无法构建 gem 本机扩展

    我的主要目标是让Redmine 与WAMPServer 一起工作 我按照以下步骤操作 如何与 WampServer 一起安装 Ruby on Rails https stackoverflow com questions 2025449 h
  • 在 TypeScript 中导入 JSON 文件

    我有一个JSON文件如下所示 primaryBright 2DC6FB primaryMain 05B4F0 primaryDarker 04A1D7 primaryDarkest 048FBE secondaryBright 4CD2C0
  • jQuery、Chrome 和“selected”属性异常

    我在 Chrome 中遇到了一个问题 但我无法判断这是 Chrome 的错误 jQuery 的错误还是我的代码中的错误 我搜索了 Chromium 的未解决问题 但找不到任何内容 jQuery 也是如此 我在这里创建了一个 JSFiddle
  • 在 Node.js 中,给定一个 URL,如何检查它是否是 jpg/png/gif?

    我目前的方法是这样的 var request require request var mime require mime var fs require fs var uri http www sweetslyrics com images
  • 为什么 CodeIgniter 中的分页链接对我不起作用?

    我正在尝试对我的产品使用 codeigniter 分页 因此有多个产品页面 但它不适合我 我不知道为什么 这是我的控制器中的分页功能 code om in allecadeaus te bepalen hoeveel producten e
  • 如果必要的单元测试失败,我可以使单元测试不确定吗?

    考虑对字典对象进行单元测试 您可能编写的第一个单元测试只是将项目添加到字典并检查异常 下一个测试可能类似于测试计数是否准确 或者字典是否返回正确的键或值列表 然而 后面的每种情况都要求字典首先能够可靠地添加项目 如果添加项目的测试失败 我们