Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit中的断言解决方法_Java_Junit - Fatal编程技术网

Java JUnit中的断言解决方法

Java JUnit中的断言解决方法,java,junit,Java,Junit,我今天看到了一种使用JUnit编写单元测试的非标准方法 而不是使用框架检查 Assert.assertTrue("Unexpected response encoding", text.length() >= 1); 将引发一般异常 if (text.length() < 1) { throw new Exception("Unexpected response encoding"); } if(text.length()

我今天看到了一种使用JUnit编写单元测试的非标准方法

而不是使用框架检查

Assert.assertTrue("Unexpected response encoding", text.length() >= 1);
将引发一般异常

if (text.length() < 1) {
    throw new Exception("Unexpected response encoding");
}
if(text.length()<1){
抛出新异常(“意外响应编码”);
}

我想说服作者采用第一种风格。除了冗长、意图清晰等原因之外,您知道这些方法还有什么不同吗?

JUnit报告将第一种样式显示为“失败”,而第二种样式显示为“错误”,因为引发了未捕获的异常


这取决于您是否关心这种类型的标签,并且完全是主观的,但我个人更愿意将其视为“失败”。JUnit报告将第一种样式显示为“失败”,而第二种样式显示为“错误”,因为引发了未捕获的异常


这取决于您是否关心此类标签,是否完全主观,但我个人更愿意将其视为“失败”。

他们在报告中的处理方式有两种不同:

  • 正如@Matt所提到的,一个是失败,另一个是错误
  • Imagene
    Assert.assertEquals
    ,失败时,它会在报告中报告
    预期值
    发现值
    以及消息

  • 他们在报告中的处理方式有两种不同:

  • 正如@Matt所提到的,一个是失败,另一个是错误
  • Imagene
    Assert.assertEquals
    ,失败时,它会在报告中报告
    预期值
    发现值
    以及消息

  • 如果您的主要目标是说服某人使用第一种方法而不是第二种方法,并且您需要更多的弹药(我同意Jon Skeet关于您不应该需要更多弹药的评论),那么在测试代码上使用一些代码覆盖工具

    优秀的开发人员将毫不费力地获得100%的单元测试覆盖率。如果不进入
    if
    条件,糟糕的开发人员将无法获得100%的覆盖率。无论哪种方式,你都可以对差劲的开发人员唠叨不休。为什么你的保险范围不是100%?或者为什么单元测试失败


    这是不公平的,但它会激发期望的行为。

    如果你的主要目标是说服某人使用第一种方法而不是第二种方法,并且你需要更多的弹药(我同意Jon Skeet的评论,你不应该需要更多的弹药),那么在测试代码上使用一些代码覆盖工具

    优秀的开发人员将毫不费力地获得100%的单元测试覆盖率。如果不进入
    if
    条件,糟糕的开发人员将无法获得100%的覆盖率。无论哪种方式,你都可以对差劲的开发人员唠叨不休。为什么你的保险范围不是100%?或者为什么单元测试失败


    这是不公平的,但它会激发期望的行为。

    除了前两种和约定之外,你还需要什么吗?如果他们真的必须使用这种格式,他们至少可以使用Assert.fail()而不是抛出异常。@Brian Agnew编辑了这个问题,这是一个错误。问题是假设条件相同时的样式。除了前两种格式和约定之外,您还需要其他格式吗?如果他们真的必须使用这种格式,他们至少可以使用Assert.fail()而不是抛出异常。@Brian Agnew编辑了这个问题,这是一个错误。问题是假设条件相同时的风格。这是一个很好的观点。您在代码中区分测试错误和未测试错误,就好像在JUnit4中,框架本身不区分失败和错误一样(请参见org.JUnit.runner.notification.Failure)。自定义运行程序,例如Eclipse提供的运行程序,仍然可能调用未捕获的
    AssertionError
    failure和其他未捕获的异常错误。@pholser,这是一个公平的观点。我主要考虑的是Eclipse和IntelliJ中的运行程序,以及maven surefire插件报告的内容(每个插件都将失败与错误区分开来),这是一个非常好的观点。您在代码中区分测试错误和未测试错误,就好像在JUnit4中,框架本身不区分失败和错误一样(请参见org.JUnit.runner.notification.Failure)。自定义运行程序,例如Eclipse提供的运行程序,仍然可能调用未捕获的
    AssertionError
    failure和其他未捕获的异常错误。@pholser,这是一个公平的观点。我主要考虑的是Eclipse和IntelliJ中的运行程序,以及maven surefire插件报告的内容(每个插件都将失败与错误区分开来)。