0

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

而不是使用框架检查

Assert.assertTrue("Unexpected response encoding", text.length() >= 1);

抛出一个通用异常

if (text.length() < 1) {
    throw new Exception("Unexpected response encoding");
}

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

4

3 回答 3

3

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

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

于 2012-10-11T15:21:16.643 回答
1

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

  1. 正如@Matt 所说,一个是失败,另一个是错误。
  2. Imagene Assert.assertEquals,当失败时,它会在报告中同时报告expectedfound值以及消息。
于 2012-10-11T15:28:28.403 回答
0

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

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

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

于 2012-10-11T16:47:39.227 回答