我刚刚开始使用Eclipse,所以对我很轻松;)。但是在尝试调试JUnit测试用例时,我得到一个对话框,指出当我在我的测试方法的代码中找到这一行时找不到源:
Assert.assertEquals(1, contents.size());
我知道我应该去尝试从某个地方下载源代码,但我真的不想这样做,因为我没有兴趣进入JUnit代码。我有JUnit运行时jar所以为什么Eclipse希望我拥有所有引用的工具源代码以调试我自己的代码(看起来有点傻)?
我的主要问题是,如果源不可用,我如何告诉Eclipse跳过此对话框并允许我继续调试我自己的代码?
[编辑]
我已经找到了原因。似乎Eclipse在内部JUnit代码抛出异常时似乎认为它需要源代码。一般来说,无论如何都要告诉它它没有,只是让它抛出某种错误对话框?
答案 0 :(得分:20)
我有这个非常讨厌的问题很长一段时间但终于能够解决它了。在我的例子中,在Java的 Transformer.IsRuntimeCode(ProtectionDomain )函数中抛出了一个空指针异常。
我真的不需要知道这个,因为异常被捕获和处理,但eclipse会在每次发生这种情况时暂停调试,并告诉我源代码不可用。结果,我不断地按下按钮继续执行代码。
为了防止这种情况发生,我:
这阻止了调试器在捕获的NullPointerException期间暂停程序流。
答案 1 :(得分:10)
调试调用堆栈在抛出异常时将显示JUnit源代码行 但是,如果您没有JUnit的源代码,则不必担心。
如果你回到callstack中的一行,你应该看到导致JUnit异常的行(你的源代码)。
这应该足以调试你的代码。
要将源与JUnit相关联,您可以在项目的库中添加junit.jar
,并将junit-x.y.z-src.jar
与junit-x.y.z.jar
,like so相关联:
这会在项目的.classpath
生成如下行:
<classpathentry kind="lib" path="junit-x.y.z.jar" sourcepath="junit-x.y.z-src.jar">
注意:实际上,junit[...].jar
行中会有classpathentry
个文件的完整路径。但您也可以使用Linked resources来避免.classpath
文件中的固定值(完整路径)。
答案 2 :(得分:2)
我有类似的问题。我通过右键单击包浏览器中的项目文件夹并选择刷新来修复它。代码源与调试器不同步,并对此进行了更正。 Transformer.IsRuntimeCode(ProtectionDomain)源找不到消息不再出现。
答案 3 :(得分:1)
在单独的行上计算contents.size(),或者在方法上设置断点。
另请注意,Eclipse中的junit视图允许您导航堆栈跟踪。
答案 4 :(得分:1)
使用步骤过滤器避免单步执行... junit ...包。右键单击堆栈跟踪,然后选择Filter Package。您可能必须先使用“使用步骤过滤器”打开过滤。 ~~~
答案 5 :(得分:0)
我和另一个jar有类似的问题,即使我指向它会再次要求它。我能够通过在ANT上用debug="on"
编译jar来解决它。