断言assertNotEquals静态导入引起编译错误

5
我有一个名为 Foo.java 的文件,它可以成功编译,但是当我添加了一行代码后:
import static org.junit.Assert.assertNotEquals;

这会导致我的Ant构建出现以下错误:
compileTests:
[javac] Compiling 27 source files to C:\example\bin
[javac] C:\example\src\Foo.java:7: error: cannot find symbol
[javac] import static org.junit.Assert.assertNotEquals;
[javac] ^
[javac]   symbol:   static assertNotEquals
[javac]   location: class
[javac] 1 error

我正在使用JUnit 4.4。在javac任务的classpath中包含了junit-4.4.jar。
我尝试使用不同的编译器版本和标志 -Dbuild.compiler=javac1.7 和 -Dbuild.compiler=javac1.8,但没有任何区别。我仍然得到完全相同的错误。
assertNotEquals是从Assert中静态导入的唯一一个会导致此错误的方法。
我已经看过这篇文章Java static import causing compile error. Probable compiler bug?,并尝试只导入Assert,然后像该文章建议的那样在每个assert语句前添加Assert.。我得到了相同的错误,这次是在Assert.assertNotEquals()方法调用处而不是导入语句。
该导入在Eclipse上成功编译和运行。
有人对此的原因有什么想法吗? 我希望找出问题的根本原因,而不是实施解决方案。

你能让我们看到你试图调用的代码行吗?你实际调用assert方法的那一行代码是哪一行? - dkatzel
1个回答

7
您正在使用 Junit 4.4 版本。直到 4.11 版本才添加了 AssertNotEquals 方法。
请参考 JUnit 4.11 发布说明
若您升级到最新的 JUnit jar 包,编译错误应该就可以解决。Eclipse 可能在使用其内置版本时已包含了最新的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接