【问题标题】:Test for expected compile time errors in java在 java 中测试预期的编译时错误
【发布时间】:2014-09-01 06:31:15
【问题描述】:

这个问题可以被认为只是这个 c++ 问题的 Java 版本:Unit test compile-time error

我正在编写一些与 Java 中的泛型混淆的实用程序类,并且事情变得非常奇怪,以至于我发现自己希望我知道如何为应该导致编译器错误的代码编写单元测试。我知道如何使单元测试仅在引发预期异常时通过。只有当我得到预期的错误时,才知道如何让它通过。这可能吗?如果是这样,怎么做?有这样做的典型方法吗?有 jUnit 方式吗?

一个例子是使用一种方法(比方说,一个执行强制转换的方法)以一种会导致错误的方式。我想要一个只有在调用该方法的代码产生错误时才能通过的测试。我会将它与其他不应导致错误的测试一起运行。

作为另一个示例阅读Generic And Parameterized Types 并注意 cmets 经常说诸如“因 ClassClassException 失败”“应该失败,但成功”之类的话。这些看起来像是可以自动化的测试。

这不是为了测试编译器。这是为了测试我写的通用代码是否做了它应该做的事情。

我的直觉告诉我,这超出了编译器或库所能做的范围,而是进入了 IDE 魔法、奇怪的项目配置或静态代码分析的领域。我真的不知道。我只是想确定代码会导致错误,因为它不会导致错误。我使用 eclipse、ant 和 jUnit,因此详细说明如何使用它们完成此操作的答案将是完美的。

【问题讨论】:

  • 如果你使用的是 JUnit,你可以这样做:@Test(expected=NullPointerException.class).
  • 类似this question?
  • 这是一个运行时异常。我说的是编译器错误。
  • 也许运行编译器并检查它的返回码?不过,我很好奇无法编译的代码的目的是什么——你能分享一下你背后的动机吗?
  • 为了证明我的代码会导致编译器错误,而不是让错误的静态转换通过,这会导致运行时错误。

标签: java eclipse unit-testing generics ant


【解决方案1】:

您可以使用其他软件运行一些命令并检查其结果。然后很容易检查编译时错误。可以将其编写为某种语言的脚本或 java 中的单独项目,但它必须与您的项目不同。

您要运行的命令应该是 javac、ant 或任何其他命令,具体取决于您的 IDE。

【讨论】:

  • 我的 IDE 是带有 Ant 的 Eclipse。即使它存在于另一个项目中,将其作为正常构建的一部分自动化也是很好的。你见过这样做吗?你能举出任何例子吗?
  • ANTUnit 可以帮助你ant.apache.org/antlibs/antunit 但我对 ANT 不熟悉,所以我不知道更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多