【问题标题】:How to ensure that the developer knows what is not important to be tested? [closed]如何确保开发人员知道什么是不重要的测试? [关闭]
【发布时间】:2017-04-05 12:08:34
【问题描述】:

在提出这个问题之前,我阅读了这些问题及其答案:

也可以阅读其他博客,例如 Martin Fowler - TestCoverage

我的结论 - 当然是简历 - 社区说:

  • 不要浪费时间(时间就是金钱)来创建测试以获得 100% 的代码覆盖率。
  • 也许像 80% 或 90% 的覆盖测试这样的神奇数字可以覆盖 99.99999% 的功能。那么,您为什么要浪费时间来完成 0.000001% 的功能呢?!

我同意。但我担心给开发人员不创建测试的机会,因为他认为这并不重要。我知道我们可以通过让其他人在发布代码之前验证代码来避免这些错误。

问题

以一种控制开发人员知道不应该测试的方式进行思考,在代码中创建一种//special comment 给开发人员明确标记他知道不值得测试的地方将是一个好习惯要测试?或者那会是一个不相关的信息,会弄乱代码吗?有人可以提出另一个想法来完成它吗?

在阅读此问题的任何答案之前,我认为这是一种很好的做法,因为第三方可以检查(同意与否)开发人员未涵盖该代码的原因。

java 示例:

public String encodeToUTF8(String value){
    String encodedValue = null;

    try {
        encodedValue = URLEncoder.encode(value, "UTF-8");
    }
    catch (UnsupportedEncodingException ignore) {
        // [coverage-not-need] this exception will never occur because UTF-8 is a supported encoding type
    }
    return encodedValue;
}

术语:100% 代码覆盖意味着覆盖所有分支,而不仅仅是所有行。

【问题讨论】:

    标签: unit-testing testing


    【解决方案1】:

    大多数覆盖工具都具有这一点,一个特殊的注释可以声明此代码将没有覆盖。例如 Perl 的 Devel::Cover uses # uncoverable 和 Ruby 的 simplecov has # :nocov:

    但是,我会提醒开发人员不要过早地宣布事情是不可发现的,或者过于依赖它。编写代码的开发人员可能对测试机会视而不见。和任何评论一样,如果周围的代码发生变化,它可能会过时。使用过多,它会给您的测试覆盖率带来错误的信心。

    在您完成测试、运行覆盖并确定该语句实际上几乎不可能测试后,将其用作最后的手段。同样,我警告不要用它作为借口来掩盖那些太难测试的东西。这通常表明需要重新设计,而不是真正无法测试的代码。


    您的示例代码是滥用“不可发现”代码的完美案例。如果异常永远不会发生,我不得不想知道为什么那里有一个 catch 块。正如所写的那样,如果它确实发生,它将被静音,用户会想知道为什么他们在代码的后面某个地方会收到 NullPointerException。相反,不应该有try/catch 块。应该允许异常在编码失败的异常情况中抛出错误。

    public String encodeToUTF8(String value){
        return URLEncoder.encode(value, "UTF-8");
    }
    

    我不是 Java 程序员,但我知道它不喜欢未经检查的异常。如果 Java 要求您捕获所有可能的异常(呃),catch 应该断言或重新抛出;不会使异常静音的东西。

    这就是为什么您要非常、非常谨慎地使用“不可发现”标记,并且只有在经过多次审查之后才能使用。检查未发现的代码通常会发现隐藏的错误或设计不佳的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2010-09-08
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多