单元测试编写_如何优雅地编写单元测试

本文探讨了编写单元测试的重要性,尤其是在敏捷开发中的作用。通过阐述编写测试用例的好处,如减少错误定位时间、保持代码可控,作者提出了一些建议,包括从负面测试开始、覆盖多种场景以及利用模拟技术。强调了高覆盖率并不代表一切,而健壮的代码是高可用性的关键。最后,鼓励开发者将单元测试视为开发过程不可或缺的一部分。
摘要由CSDN通过智能技术生成

单元测试编写

“如果您不喜欢对产品进行单元测试,那么您的客户很可能也不愿对其进行测试。” -匿名

在编写单元测试用例时,我们大多数开发人员都变得有些困倦。 为什么我们会遇到这种阻力?

我于2018年从NIT-TRICHY毕业。我在JP Morgan的职业生涯是通过为遗留应用程序编写Junit测试用例而开始的。 我可以确实地告诉你,为别人的已开发代码编写测试用例已经很累了。 我很沮丧。 像其他每位有抱负的CS毕业生一样,我对公司生活也抱有很高的期望,例如,开发令人惊叹的产品,在云上工作,在BigData上玩耍等等。 然而,企业生活并不总是一朵玫瑰花:D。

在编写测试用例时,有两种不同的方法:

  • 您遵循测试驱动开发,在此首先编写测试用例,然后再从那里开发代码。
  • 当您的旧产品需要法规遵从性时,您可以编写测试用例。

我们都知道,TDD方法起源于敏捷开发的早期阶段,很可能是在2000年代初期。 最近,大多数基于产品的公司都采用了敏捷标准,并且测试覆盖率是敏捷开发的关键属性之一。 那么敏捷之前的产品呢? 这是第二点。 您编写测试用例以使您的产品成熟。

通过编写测试用例,我们可以获得什么?

现在我们知道编写测试用例对于您的应用程序是必要的,因为它是使您的应用程序成熟的最重要属性之一。 另一方面,您可能会认为,我的应用程序运行正常! 为什么我需要编写测试用例来进行验证?

如果您没有适当的测试用例,让我为您解决一些可能会遇到的问题☺。

  • 结对编程是敏捷标准中的一个常用术语,您可以使用同意的基于Web的版本控制和协作平台(如GITHUB)在同一代码库中与同事一起工作。 在这种方法中,合作伙伴的功能更改可能会阻碍您正在使用的功能。 这两个功能可能彼此完全不同,但是可能会导致您的功能无故失败。 后来,查找错误并修复它是非常大的开销。 如果您具有适合您的功能的适当测试用例,则发现错误很容易,从而减少了宝贵的时间。
  • 您可能会失去对应用程序的控制。 每天,您的产品都会收到很多要求和变更。 您的应用程序将极大地增长。 即使您的代码中只有一个错误,也可能导致多次失败和混乱。 通过编写测试用例,您将了解系统中正在发生的每项更改。 您将知道输入您的代码库的任何错误代码。

在敏捷开发策略中,这两个问题是任何产品都面临的最普遍的问题。

如何编写优雅的测试用例以避免这种有害的失败?

当您开始编写测试用例时,也许您可​​以遵循某种方法来简化编写测试用例的方式。 当我开始编写测试用例时,我遇到了一些这样的问题,让我以点数的形式列出来。

  1. 当您开始开发一段代码时,请始终从测试类开始。 确保主类中有一个非常基本的可运行代码,并检查测试类是否有调用。 如果可以做到,那么您就完成了第一步。
  2. 永远是负面的。 没错,您没听错。 对测试用例持否定态度。 不要去寻找成功的测试运行,否则可能会在稍后阶段引起问题。 编写测试用例,以使您的系统/功能失效。 随后,开始重构代码以解决此故障。 这样,您可以确保开发中的代码牢不可破。 例如,假设我有一个要开发的功能,它将使我在两个给定的时间戳之间获得一组注册用户。 我将从向系统提供无效输入(例如,无效的日期时间格式)开始,然后检查它在哪里失败(如果需要重构,则必须对其进行处理)。 其中一些故障可能会级联到您的系统故障。 现在,您没有生产推送就遇到了严重的问题。 这样,您可以确保您的客户拥有一个高可用性应用程序,该应用程序不会因客户端提供的任何错误而中断。
  3. 尝试为单个代码流找出多个方案。 尝试为所有这些情况编写测试用例。 它使您的系统健壮。 尝试覆盖异常和所有有效/无效流。
  4. 人们总是说,一个好的,成熟的应用程序应该具有> 90%的覆盖率。 总体而言,覆盖范围取决于几个因素。 行数和条件或分支数。 总覆盖率=(覆盖的行数+(覆盖的分支数)* 2)/总行数 。 这里的数字 2 是因为每个IF和ELSE块。 通过覆盖大多数分支,您应该能够覆盖几乎总代码的90%。 这两个因素是测试覆盖面的基本要素。
  5. 在编写测试用例时,使用模拟始终很重要。 当需要返回一组用于测试重要代码的测试数据时,可以模拟服务。我见过人们在Java中使用Reflections来设置或测试私有字段。 避免思考以测试或设置您的私人成员。 通过使用反射,您无视私人机构的唯一目的。 而是在运行时加载测试上下文,该上下文将数据提供给您的私有字段。

我想我已经涵盖了编写测试用例时应该注意的最基本的细节。 如前所述,没有单元测试的产品是不可信的,容易遭受各种复杂情况的影响。

健壮的代码是在所有情况下都坚不可摧且具有高可用性的代码。 说到高可用性,在下一篇文章中,我将撰写有关架构的必要弹性策略,以确保系统中的高可用性和容错能力。

让我们以一种心态开始编写测试用例,它不仅是质量测试的一部分,而且是鲁棒开发的重要组成部分。

感谢大家阅读到最后。 我希望这是一篇有用的文章。

所有的赞美都归耶和华。

PS —这是我的第一篇文章。 请花些时间为我的成长提供一些建设性的反馈。 谢谢☺

翻译自: https://hackernoon.com/how-to-write-unit-tests-elegantly-vd3w3wo7

单元测试编写

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值