提示与技巧

为什么要编写自动测试?

在为Upsoirce博客撰写了有关评估代码审查期间的测试,我发现自己被迫写一些关于为什么我们应该编写自动测试的更一般性的东西。如果您已经知道测试的价值,那么您可能会在这里找到一些东西,有助于说服您的同事在这个想法上销售较少。

为什么我们编写自动测试?
在我的关于代码评论的第一篇文章,我提到,我们经常在代码审查中进行的许多活动可以自动化 - 检查样式,格式化,代码覆盖范围等。自动化这些事情的好处是,一旦自动化,您将不再需要人来给您信心您的代码符合某些条件。

测试为我们提供了类似的安全性。一旦您编写了一些自动化测试来证明您的代码以特定方式的行为,只要它们以某种连续的集成环境运行团队,只要他们通过,他们就会继续使我们对未来的法规充满信心。

进行自动测试的另一个原因是,通常比生产代码更容易推理测试 - 他们应该清楚地说明所需的功能,应该可以阅读,并且应该提供有关代码作者作者具有哪些内容
考虑(可能暗示他们没有考虑过的区域)。

我们在谈论什么样的测试?
我们可能会编写各种自动测试的类型。在Java世界中,我们可以通过朱尼特,,,,测试,,,,Spock,或类似,或者可能是端到端测试,可能是由类似工具驱动的或者机器人

很少有新代码(无论是错误修复还是新功能)不需要新的或更新的测试来介绍它。即使是出于“非功能”原因(例如绩效)的变化,也可以通过测试经常证明。

为错误修复或功能添加测试通常也是记录更改代码所做的事情的好方法(“为什么?”的含义)。这在开源项目之类的项目中特别有用,在开源项目中,文档通常落后于实施。

但是写测试很难!
对,是真的。但是编写生产代码也是如此。解决困难问题是我们擅长的问题。再加上我们喜欢它!而且,当您有一系列测试来证明我们的生产代码工作,不仅我们对解决方案有更多的信心,而且还为我们提供了自由和安全,以便以后重构代码。

此外,当您使用Intelij Idea等IDE时,实际创建新测试的机制并不困难。有关更多详细信息,我们有屏幕截图帮助文档

测试中断时会发生什么?
如果测试失败,则显然必须更改某些东西 - 生产代码或测试代码。这是您必须根据两个结论之一做出的决定:

  1. 测试应该失败:例如,添加了一项新功能,需要改变现有行为。在这种情况下,需要更改现有的测试,或替换为主张正确行为的新测试。
  2. 测试应该通过:脑海中的两种可能性 - 首先,这些测试依赖于某些副作用,这些副作用已被新功能或修复(是否有意)更改。在这种情况下,需要对这些现有测试进行更新(理想情况下,不依赖于无证件的副作用)。其次,一些新代码破坏了现有功能。在这种情况下,需要重新编写新代码以不影响现有功能。

请注意,在任何情况下都不得打破测试导致任何行动 - 要么需要更改测试或生产代码。

关于编写良好测试的建议
在当今的敏捷和DevOps中,作为开发人员,我们不仅负责编写代码行以实现功能或修复错误。一方面,我们还期望我们编写代码行,以现实的方式测试这些错误和功能。通常,我们没有接受过这种思考的培训,但是专业的测试人员拥有。如果您有QA/测试团队,或者可以访问测试人员(或测试背景可靠的开发人员),请在编写测试时寻求帮助 - 让他们查看您的测试,或者,如果可能的话,请与您配对when you’re coming up with scenarios.

虽然我们在帖子中包括了一些评估测试的指针审查自动测试,专业测试人员可以建议更多的方法检查代码。仅需一些示例即可阅读文章为您的代码做可怕的事情

总之
测试不仅仅是检查您的代码执行您认为所做的事情。自动化测试是探索代码局限性,发现其在一系列输入下的行为以及“记录”预期行为(无论是在正常使用和特殊情况下)的一种方式,通过将这些要求编码到获得的测试中来在您的CI环境中执行。

自动测试为您提供安全网,使您有信心重构代码,添加功能并解决缺陷。当您的测试西服全是绿色时,您可能没有破坏任何东西。

下面的评论再也无法编辑。

5对为什么编写自动测试的回应?

  1. 头像

    罗布·金昂说:

    2015年8月31日

    您错过了编写测试的最重要原因。测试是对监视的编码等同的编码,而CI等同于警报。如果您认为监视是一个好主意,那么(通过及时属性),您认为单元和集成测试是一个好主意。

    • Trisha Gee

      Trisha Gee说:

      2015年8月31日

      这是一个很好的类比!

  2. 头像

    安德烈亚斯·舒纳克(AndreasSchöneck)说:

    2015年9月11日

    一种用于对测试质量本身进行测量的方法,可以开始使用突变测试。它可以自动更改生产代码,并针对修改的代码运行单元测试,以查看它们是否会失败,因此很可能检测缺陷。目前,我们使用,可以轻松地与Maven集成。此外,还有一个可用于Intellij Idea的插件(或多或少可用…)。

    • Trisha Gee

      Trisha Gee说:

      2015年9月15日

      这很有趣,前几天我正在与一些开发人员谈论突变测试。这是一种非常有趣的方法,绝对是工具箱中的另一个工具。

  3. 头像

    Karl Gjertsen说:

    2015年9月17日

    有了当今所有可用的工具,我仍然不愿将单位测试添加到代码中感到惊讶。是的,编写测试的开销是一个开销,但是在将来节省了很多时间,尤其是在大型项目上。

Baidu