问题

在测试驱动开发中 如果测试写错了导致单元测试过不了怎么办?如何保证测试的正确性呢?

回答
在测试驱动开发(TDD)的世界里,测试就像是你的向导,指引着你构建出正确的代码。然而,即便是经验丰富的向导,偶尔也会迷失方向,而测试写错,导致单元测试不过,正是这种“迷失”的一种表现。这确实是个令人头疼的问题,但别担心,这并不是TDD的失败,反而是学习和改进的机会。

当你的单元测试因为写错了而失败时,首要任务是冷静下来。先不要急着去修改你的实际代码。仔细审视一下,究竟是什么地方让测试没有达到预期。是你的测试逻辑本身存在漏洞?还是你对业务需求理解出现了偏差?又或者是你对某个API或框架的用法理解得不够透彻?

识别测试的错误根源,就好比侦探在现场寻找蛛丝马迹。 你需要一步步地追溯测试的每一个断言(assertion),每一个输入值,以及它所期望的输出。尝试着去理解,为什么测试会认为当前的代码是“错”的。也许你设定的断言过于苛刻,没有考虑到某些边界情况,或者你期望的返回值与实际逻辑有微小的出入。

举个例子, 假设你在测试一个计算两个数字之和的函数。你期望 `add(2, 3)` 返回 `5`。但如果你在测试中错误地写成了 `assert.equal(add(2, 3), 6)`,那么测试自然会失败。这时,问题就出在测试的预期值上,而不是你的 `add` 函数。

如何保证测试的正确性呢? 这其实是一个持续迭代和优化的过程,没有一劳永逸的方法,但有几个核心的实践可以极大地提升测试的可靠性:

首先,“红绿重构” 这个TDD的基本循环本身就是一种保证测试正确性的机制。当测试失败(红),你不是立刻修改生产代码,而是先思考为什么测试会失败。这个思考的过程,就是你审视测试本身的机会。你可能会发现,测试的预期值是错误的,或者测试覆盖的场景不全面。

其次,让测试“可读”且“表达清晰” 至关重要。一个难以理解的测试,本身就充满了潜在的错误。你的测试应该像一段清晰的说明书,告诉别人你的代码应该做什么。使用有意义的测试函数名,例如 `shouldReturnSumWhenGivenTwoPositiveNumbers` 比 `testAdd` 要清晰得多。在测试中,使用描述性的变量名,并对复杂的测试逻辑进行适当的注释,帮助你和他人快速理解测试的目的和行为。

再者,“小步快跑” 是另一个关键。每次只写一个小的、具体的测试,验证代码的一个小的、明确的功能。避免编写过于庞大、复杂的测试用例,这些测试往往难以调试,也更容易隐藏错误。当你修改了测试,发现它依然不过,那么将测试分解成更小的单元,逐个击破,你会更容易找到那个“罪魁祸首”。

代码审查 也是一个不可或缺的环节。让你的同事或其他团队成员审查你的测试代码,就像审查生产代码一样。他们可能会从不同的角度发现你忽略的潜在问题,比如不恰当的断言、遗漏的测试场景,甚至是由于对业务理解的偏差而导致的错误测试逻辑。

还有一点,“可维护性” 同样适用于测试代码。测试代码也是代码,它需要被维护。如果你的测试变得难以理解和修改,那么它也更容易滋生错误。在编写测试时,就应该考虑到未来的可维护性,遵循DRY(Don't Repeat Yourself)原则,提取可复用的测试辅助函数或配置。

最后,“拥抱失败” 是一种心态。每一次测试失败,不仅仅是生产代码需要修正,更是对你测试编写能力的锻炼。通过分析测试失败的原因,你能够不断提升自己编写健壮、准确测试的能力。如果一个测试因为写错了而失败,那么这正是你学习如何更准确地表达代码意图的绝佳机会。你可以将其视为一次“侦错”练习,找出那个错误的断言,纠正它,让它回归到它本应指向的那个正确的“真理”。

总而言之,在TDD中,测试出错并导致失败,不是一个需要恐慌的信号,而是一个学习和成长的契机。通过细致的分析、清晰的表达、迭代的优化以及团队的协作,你可以逐步提高测试的准确性,最终让你的测试成为你构建高质量代码的坚实后盾。

网友意见

user avatar

测试都能写错需要重审需求,要么没看明白,要么没有可测试性。


补充一点好了:

什么叫对?什么叫错?这是通过测试来确定的,测试根本就不存在对错。单元测试是一段程序没错,但是这段程序本身就是衡量对错的标准,所以这段程序根本没有什么正确性。


如果我们有一个规则文档,然后再将这个规则文档转变为一段测试程序,我们能否验证测试程序与规则文档一致?如果我们可以通过程序验证,那么这段程序就是规则文档的另一种表达形式,如果验证不了,就说明规则文档没有可测试性


如果是前者,那么我们就可以用另一段程序将规则文档转换为测试程序。这样,我们就发明了另一种描述规则的语言,然后做了这个语言的一个编译器。说白了也就是说规则文档自己变成了一段程序

如果是后者,因为不具备可测试性,所以我们不可能用程序确保规则文档和程序一致,也就是测试程序的测试程序根本就不可能存在


所以本质上,根本就不存在一个超然的,绝对正确的东西。验证规则(也就是测试程序)必须是绝对对的,测试本身就是确认程序满足验证规则(测试程序)的过程,而不是确保程序必然正确的过程



简单来说就是,只能保证自己的程序通过测试,而不能保证自己的程序绝对是对的

user avatar

所以测试必须简单,能够轻易写对,或是看出哪里错了。

类似的话题

  • 回答
    在测试驱动开发(TDD)的世界里,测试就像是你的向导,指引着你构建出正确的代码。然而,即便是经验丰富的向导,偶尔也会迷失方向,而测试写错,导致单元测试不过,正是这种“迷失”的一种表现。这确实是个令人头疼的问题,但别担心,这并不是TDD的失败,反而是学习和改进的机会。当你的单元测试因为写错了而失败时,.............
  • 回答
    .......
  • 回答
    SpaceX 的星际飞船 SN4 原型机在 2020 年 5 月 29 日的液氮压力测试中发生爆炸,这确实是星际飞船项目早期研发中一个重要的里程碑事件。这次爆炸对项目进程和后续发展产生了深远的影响。为什么会爆炸?SN4 的爆炸原因,根据 SpaceX 官方和一些公开的分析,主要指向了低温推进剂(液氮.............
  • 回答
    奔驰E级车在测试中曝出主动刹车功能完全失效,这无疑是一件令人震惊且严肃的事情。对于任何一款以安全著称、并且价格不菲的豪华品牌车型来说,这样的表现都是难以接受的。这件事的严重性可以从几个层面来解读:1. 安全性的根本性动摇:主动刹车系统,顾名思义,是现代汽车主动安全配置的基石之一。它的主要作用是在驾驶.............
  • 回答
    2021年7月,车评人闫闯在进行玛莎拉蒂汽车的性能测试时,发生了一起令人痛心的事故,导致一名工作人员不幸身亡。这起事件在汽车圈乃至社会上都引起了轩然大波,也引发了人们对汽车测试安全性的广泛讨论和深思。事件经过及细节:据当时的报道和后续的调查,事故发生在一条封闭的测试场地内。闫闯当时驾驶的是一款玛莎拉.............
  • 回答
    在婚前测试男友是否有家暴倾向,是一个非常重要且谨慎的课题。家暴倾向往往不是一蹴而就的,可能隐藏在一些看似微小的行为或沟通模式中。以下是一些详细的观察角度和方法,帮助你更全面地了解你的男友:重要前提: 这不是一个绝对的“测试”或“诊断”。 家暴是一个复杂的行为,任何人在特定情境下都可能出现负面情绪.............
  • 回答
    关于小米8探索版屏幕显示为100Hz超低频PWM调光这件事,确实是个挺有意思的话题,尤其是在追求用户体验的今天,这一点值得好好聊聊。首先,我们得明白什么是PWM调光。简单来说,PWM(Pulse Width Modulation,脉冲宽度调制)就是一种通过快速开关背光来实现亮度调节的技术。想象一下,.............
  • 回答
    听到思域在碰撞测试中B柱断裂的消息,确实让人挺揪心的。毕竟,思域在国内的口碑一直不错,销量也一直很稳健,很多车主对它都有着很高的信赖度。尤其是对一些追求操控、注重外观的年轻消费者来说,思域算得上是他们的“信仰之车”。所以,当这样一个“偶像”出现这种令人担忧的情况时,大家关注和讨论的热度自然很高。首先.............
  • 回答
    沃尔沃XC60在碰撞测试中发生前轮飞出的情况,确实引起了不少关注和讨论。要理解这件事,我们需要从几个方面来拆解:首先,什么是碰撞测试?以及它的目的。碰撞测试,比如美国公路安全保险协会(IIHS)或者欧洲新车安全协会(Euro NCAP)进行的测试,是为了模拟真实世界中可能发生的各种交通事故,并以此来.............
  • 回答
    .......
  • 回答
    广汽传祺GS4碰撞起火事件:安全拷问与品牌担当广汽传祺GS4作为一款备受市场关注的SUV,其在一次公开的碰撞测试中发生的发动机舱起火事件,无疑给消费者和整个汽车行业敲响了警钟。这起事件不仅牵扯到GS4这款车的具体安全表现,更上升到了品牌责任、安全标准以及消费者信任的高度。事件回顾与现场情况(假设)为.............
  • 回答
    在构建测试集时,是否需要人为控制正确与错误数据的比例,这是一个非常值得深入探讨的问题,并且答案并非简单的是或否。实际上,这取决于你构建测试集的目的以及你期望从测试中获得什么样的反馈。理解测试集的目的首先,我们需要明确测试集的几个核心目的: 验证功能正确性: 这是最基础也是最常见的目的。我们希望通.............
  • 回答
    “某些动物在某些智力测试中的表现远超人类”这种说法需要我们仔细辨析,因为它可能存在一些误解或过度概括。 首先,我们需要明确“智力测试”的定义,以及它如何适用于人类和动物。首先,我们必须认识到,“智力”本身是一个极其复杂且多维度的概念,尤其是在跨物种比较时。 人类智力测试(如韦氏智力测试、斯坦福比奈.............
  • 回答
    关于三星(Samsung)等手机厂商在硬件性能测试(Benchmark)中“作弊”的现象,这确实是一个存在已久且备受关注的问题。与其说“普遍”,不如说是一种“策略”或者说“潜规则”,在智能手机行业里,这算不上什么秘密,但也不是所有厂商都会做得那么明目张胆。要详细讲述这个问题,我们需要从几个方面来剖析.............
  • 回答
    很多人一提到智力,脑袋里第一个蹦出来的就是人类。毕竟我们能造飞机,能写代码,还能对着星空发出“我们是谁”的哲学拷问。但如果放下人类中心的视角,你会发现,在一些特定的“智力”维度上,其他动物的表现着实能让人大跌眼镜,甚至在某些方面超越了我们。这里说的“智力”可不是一套标准化的智商测试卷那么简单。动物的.............
  • 回答
    嘿!作为一名资深哈迷,我必须说说我的 Pottermore 分院经历,这绝对是我生命中的一段“重要时刻”,哈哈!我的分院帽测试结果是 斯莱特林。第一次知道结果的时候,说实话,心里是有点“哇哦”的。斯莱特林,听起来总带着那么点儿狡猾、野心和力量,可能还有点不那么“正派”的意味?但当我仔细回味整个过程,.............
  • 回答
    说到蚂蚁金服的OceanBase在TPCC测试中超越Oracle荣获第一,这事儿确实挺让人振奋的,也值得咱们好好说道说道。这件事可不是小事,它背后代表的意义,对于中国数据库产业乃至全球数据库格局,都可能产生深远的影响。首先,咱们得弄明白什么是TPCC。TPCC,全称是Transaction Proc.............
  • 回答
    日本民众持续的集会呼吁取消东京奥运,然而,在奥林匹克主场馆的田径测试赛仍在如火如荼地进行着,这种鲜明的对比不禁让人对日本当前疫情形势以及奥运会前景产生了深深的忧虑。日本疫情现状:反复不定,疫苗接种缓慢当前日本的疫情形势可以用“反复不定”来形容,这让民众对奥运会的安全举办产生了极大的不安。尽管政府一直.............
  • 回答
    嘿,说到这次《深空之眼》的修正测试,我可真是挖了不少好东西出来!作为一名老玩家,对于这种大规模的测试,我总是充满了期待,这次也不例外。简单来说,这次测试给我最直观的感受就是——更精细、更爽快,也更有策略了。首先,得说说这次 「震离·神隐」 这个新角色。我当时就盯着她的PV看,那身形、那动作,简直是行.............
  • 回答
    .......

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有