单元测试编写
“如果您不喜欢对产品进行单元测试,那么您的客户很可能也不愿对其进行测试。” -匿名
在编写单元测试用例时,我们大多数开发人员都变得有些困倦。 为什么我们会遇到这种阻力?
我于2018年从NIT-TRICHY毕业。我在JP Morgan的职业生涯是通过为遗留应用程序编写Junit测试用例而开始的。 我可以确实地告诉你,为别人的已开发代码编写测试用例已经很累了。 我很沮丧。 像其他每位有抱负的CS毕业生一样,我对公司生活也抱有很高的期望,例如,开发令人惊叹的产品,在云上工作,在BigData上玩耍等等。 然而,企业生活并不总是一朵玫瑰花:D。
在编写测试用例时,有两种不同的方法:
- 您遵循测试驱动开发,在此首先编写测试用例,然后再从那里开发代码。
- 当您的旧产品需要法规遵从性时,您可以编写测试用例。
我们都知道,TDD方法起源于敏捷开发的早期阶段,很可能是在2000年代初期。 最近,大多数基于产品的公司都采用了敏捷标准,并且测试覆盖率是敏捷开发的关键属性之一。 那么敏捷之前的产品呢? 这是第二点。 您编写测试用例以使您的产品成熟。
通过编写测试用例,我们可以获得什么?
现在我们知道编写测试用例对于您的应用程序是必要的,因为它是使您的应用程序成熟的最重要属性之一。 另一方面,您可能会认为,我的应用程序运行正常! 为什么我需要编写测试用例来进行验证?
如果您没有适当的测试用例,让我为您解决一些可能会遇到的问题☺。
- 结对编程是敏捷标准中的一个常用术语,您可以使用同意的基于Web的版本控制和协作平台(如GITHUB)在同一代码库中与同事一起工作。 在这种方法中,合作伙伴的功能更改可能会阻碍您正在使用的功能。 这两个功能可能彼此完全不同,但是可能会导致您的功能无故失败。 后来,查找错误并修复它是非常大的开销。 如果您具有适合您的功能的适当测试用例,则发现错误很容易,从而减少了宝贵的时间。
- 您可能会失去对应用程序的控制。 每天,您的产品都会收到很多要求和变更。 您的应用程序将极大地增长。 即使您的代码中只有一个错误,也可能导致多次失败和混乱。 通过编写测试用例,您将了解系统中正在发生的每项更改。 您将知道输入您的代码库的任何错误代码。
在敏捷开发策略中,这两个问题是任何产品都面临的最普遍的问题。
如何编写优雅的测试用例以避免这种有害的失败?
当您开始编写测试用例时,也许您可以遵循某种方法来简化编写测试用例的方式。 当我开始编写测试用例时,我遇到了一些这样的问题,让我以点数的形式列出来。
- 当您开始开发一段代码时,请始终从测试类开始。 确保主类中有一个非常基本的可运行代码,并检查测试类是否有调用。 如果可以做到,那么您就完成了第一步。
- 永远是负面的。 没错,您没听错。 对测试用例持否定态度。 不要去寻找成功的测试运行,否则可能会在稍后阶段引起问题。 编写测试用例,以使您的系统/功能失效。 随后,开始重构代码以解决此故障。 这样,您可以确保开发中的代码牢不可破。 例如,假设我有一个要开发的功能,它将使我在两个给定的时间戳之间获得一组注册用户。 我将从向系统提供无效输入(例如,无效的日期时间格式)开始,然后检查它在哪里失败(如果需要重构,则必须对其进行处理)。 其中一些故障可能会级联到您的系统故障。 现在,您没有生产推送就遇到了严重的问题。 这样,您可以确保您的客户拥有一个高可用性应用程序,该应用程序不会因客户端提供的任何错误而中断。
- 尝试为单个代码流找出多个方案。 尝试为所有这些情况编写测试用例。 它使您的系统健壮。 尝试覆盖异常和所有有效/无效流。
- 人们总是说,一个好的,成熟的应用程序应该具有> 90%的覆盖率。 总体而言,覆盖范围取决于几个因素。 行数和条件或分支数。 总覆盖率=(覆盖的行数+(覆盖的分支数)* 2)/总行数 。 这里的数字“ 2 ”是因为每个IF和ELSE块。 通过覆盖大多数分支,您应该能够覆盖几乎总代码的90%。 这两个因素是测试覆盖面的基本要素。
- 在编写测试用例时,使用模拟始终很重要。 当需要返回一组用于测试重要代码的测试数据时,可以模拟服务。我见过人们在Java中使用Reflections来设置或测试私有字段。 避免思考以测试或设置您的私人成员。 通过使用反射,您无视私人机构的唯一目的。 而是在运行时加载测试上下文,该上下文将数据提供给您的私有字段。
我想我已经涵盖了编写测试用例时应该注意的最基本的细节。 如前所述,没有单元测试的产品是不可信的,容易遭受各种复杂情况的影响。
健壮的代码是在所有情况下都坚不可摧且具有高可用性的代码。 说到高可用性,在下一篇文章中,我将撰写有关架构的必要弹性策略,以确保系统中的高可用性和容错能力。
让我们以一种心态开始编写测试用例,它不仅是质量测试的一部分,而且是鲁棒开发的重要组成部分。
感谢大家阅读到最后。 我希望这是一篇有用的文章。
所有的赞美都归耶和华。
PS —这是我的第一篇文章。 请花些时间为我的成长提供一些建设性的反馈。 谢谢☺
翻译自: https://hackernoon.com/how-to-write-unit-tests-elegantly-vd3w3wo7
单元测试编写