这是关于测试属性的第四篇文章,在现在更为著名的“ 如何测试您的测试 ”文章中对此进行了介绍。 如果您想进行测试方面的培训和/或指导,请与我联系 。

准确性在于查明失败代码的位置。 如果我们知道有问题的代码在哪里,我们可以轻松地分析导致问题的原因,然后继续解决问题。

一个简单的例子是检查不同方法的测试。 当然,如果其中之一发生故障,我们知道在哪里寻找。

这是使用相同方法的另一种简单情况。 我们有一个PositiveCalculator类,它的Add方法将两个正数相加,或者如果它们不是正数,则抛出异常:

public int Add(int a, int b)
{if ((a < 0) || (b < 0))throw new ArgumentException();return a + b;
}

然后,我们可以编写以下测试:

[Test]public void AddTwoPositiveNumbers_GetResult()
{PositiveCalculator calculator = new PositiveCalculator();Assert.That(calculator.Add(2, 2), Is.EqualTo(4));
}[Test]public void AddTwoNegativeNumbers_Exception()
{PositiveCalculator calculator = new PositiveCalculator();Assert.Throws<ArgumentException>(() => calculator.Add(-5, -5));
}

查看测试,我们已经看到它们检查两种不同的行为。 当我们结合从测试中读取的内容以及经过测试的代码时,很容易将代码的各个部分与每个测试相关联。 因此,如果其中之一发生故障,我们将知道在哪里寻找。

不幸的是,代码并不总是像这样。 它通常以这种方式开始,但随后逐渐发展为庞然大物。 当它发生时,它要么变得不可测试,要么进行大型,相互重叠的测试,并测试多种事物。 这些都不是准确的测试。

所以,我们能做些什么?

让我们从预防措施开始:不要让代码增长。 毫不留情地保持方法小巧,并使用“单一责任原则”将代码提取为更小,易于测试和准确的功能。

但是我没有写这段代码!

如何使测试准确无误?

这是您可以做的。 现在您已经有了一个或多个测试,是时候使用它们了:开始重构代码。 进行适当的测试会告诉您是否要破坏东西,并且很容易返回工作模式,因为重构也需要很短的步骤。

将代码分解成较小的代码后,您现在可以编写较小的测试,从而为您提供大型测试所没有的准确性。 实际上,如果大型测试在相同的覆盖范围内能提供更好的信息和更好的性能,则可能要用一些较小的测试代替。

我们还可以使用以下方法使测试更加准确:

  • 每次测试一项断言–仅检查一件事时,您的测试可能比检查多项检查时更为准确。 如果您的测试中有更多的断言,请将它们分成多个测试。
  • 测试更短的场景–在旧代码中,测试大型场景很诱人,因为该代码具有很多功能,并且不会将入口点暴露给单个操作。 尝试测试较短的场景而不是较长的场景,以及较小的对象而不是大型对象。 尝试将长假分为短假。 如果使用大型测试重构代码,则可以编写更小,更准确的测试。
  • 模拟不相关的东西-如果您的依赖项执行多项任务,因此会产生更长的场景,请模拟它们。 您现在可以通过您感兴趣的相关代码运行测试,从而使测试更加准确。
  • 检查覆盖范围–如果可能,目视检查。 能够以可视方式显示代码的IDE和工具很棒,因为它们为受影响的代码的位置增加了另一条直观的线索。 在琐碎的代码上,它们无关紧要,但是在复杂的代码上,您可以比较不同测试的路径,通过应用一些消除方法,您可以找出问题所在。 您还可以将视觉路径用作测试准确性的反馈,如果不是,请使其更准确。

准确性有助于我们快速解决问题。 但这绝对不是那么容易,因为它很大程度上取决于测试的代码。 但是,结合使用我建议的方法,并利用测试工作来重构和简化测试,绝对可以达到测试精度。

翻译自: https://www.javacodegeeks.com/2014/07/test-attribute-4-accuracy.html

测试属性4 –准确性相关推荐

  1. 如何区分m的属性_测试属性#5 –区分

    如何区分m的属性 这是关于测试属性的第五篇文章,从名人级别的" 如何测试您的测试 "开始. 差异不是单个测试的属性. 区分并不孤单,因为它需要多次测试. 测试使我们能够(a)知道某 ...

  2. 如何确保测试结果的准确性和全面性?

    确保测试结果的准确性和全面性是数据质量测试工程师的重要职责.以下是一些措施和方法可以帮助保证测试结果的准确性和全面性: 设计全面的测试用例:在测试计划中,测试工程师应该设计全面的测试用例来覆盖数据的不 ...

  3. 最近朋友圈晒足迹足迹刷屏_测试属性#7 –足迹

    最近朋友圈晒足迹足迹刷屏 当我们谈论足迹时,我们实际上是在谈论隔离. 隔离是信任的关键. 等一下 测试的"检查"部分实际上是关于信任的. 我们进行检查,因为我们想确保我们的系统能够 ...

  4. python 图像分割_Python中的图像分割(第2部分)

    python 图像分割 Stuck behind the paywall? Click here to read the full article with my friend link. 卡在收费墙 ...

  5. 数据质量测试:测试数据有效性和准确性的方法

    以下为作者观点,来看看你认同吗? 如果西西弗斯(编者注:希腊神话中的人物)是一个数据分析师或数据科学家,他在山上滚动的巨石将是他的数据质量保障.即使所有获取.处理和建模的工程流程都无懈可击,但在数据管 ...

  6. 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )

    文章目录 I . 分类概念 II . 分类 ( 离散值 ) 和 预测 ( 连续值 ) III . 分类过程 IV . 分类过程中使用的数据集 ( 训练集 | 测试集 | 新数据 ) V . 数据预处理 ...

  7. CVPR 2019 | STGAN: 人脸高精度属性编辑模型

    AttGAN 和 StarGAN 在人脸属性编辑上取得了很大的成功,但当人脸属性之间相互交集或者目标人脸属性比较复杂时,这两种方式对于控制属性的标签上的精细化就显示了些许的不足.STGAN 是一个建立 ...

  8. 技术分享 | 一文带你了解测试流程体系

    软件测试是软件质量保证的关键步骤.越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低. 为了能更好的保障软件质量,在软件测试的实践中,慢慢形成了一些流程用来达到 ...

  9. 智能测试实践之路-UI缺陷检测

    背景 随着业务与技术的发展,软件架构从最初单体结构逐步演变成AI赋能的分布式体系,基础框架技术能力不断成熟,数据.控制.服务等能力的深化为业务的快速建立与扩展提供了强大的支撑能力.与此同时,测试技术由 ...

最新文章

  1. shop++商品搜索出现乱码的解决方法
  2. vue.js项目的mock数据配置
  3. 专业的软件安装包可以这样做!
  4. java 接口可以多继承
  5. 牛客网——最简真分数
  6. arm中clz指令_JavaScript中带有示例的Math.clz32()方法
  7. php分布式缓存系统 Memcached 入门
  8. 阿里布局无人驾驶;滴滴成立汽车服务;“京东 AI 天团”首亮相| CSDN极客头条...
  9. UILabel小技巧
  10. Flash对联广告及关闭按钮的制作
  11. bpsk调制及解调实验_5G调制解调原理:从入门到放弃?
  12. 学习 Java,使用哪个版本最好
  13. 一文盘点中国商业航天:民营火箭的两类瓶颈和三大趋势
  14. python蒙特卡洛求定积分_蒙特卡洛定积分(一)
  15. java oa系统二次开发_浅谈OA系统的二次开发
  16. Unity小游戏-平衡大师(安卓、PC、web)2D益智类游戏 项目展示+完整项目源码
  17. 体育生学编程——html学习
  18. Spring security oAuth2 密码错误中英文提示问题
  19. 白苹果如何制作自己的OS X 10.9“巨浪”可引导系统安装盘?
  20. 单片机通过mqtt联网(51单片机和esp01s)

热门文章

  1. 准备考试?python也能帮你划重点,上考场(误)
  2. 京东大数据技术白皮书(附下载)
  3. 基于JavaSSM和微信小程序的智能二维码门禁管理系统
  4. login.keyring的问题
  5. android studio项目中将普通文件夹变成moudle
  6. 《前沿》(Frontiers)系列英文学术期介绍
  7. href和src的区别
  8. 常见HTML符号转换整理
  9. Dockerfile中的CMD和ENTRYPOINT有什么区别?
  10. linux降调软件下载,o的发音有几种