【发布时间】: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). -
这是一个运行时异常。我说的是编译器错误。
-
也许运行编译器并检查它的返回码?不过,我很好奇无法编译的代码的目的是什么——你能分享一下你背后的动机吗?
-
为了证明我的代码会导致编译器错误,而不是让错误的静态转换通过,这会导致运行时错误。
标签: java eclipse unit-testing generics ant