eclipse本来提供junit的运行和调试功能,但是在大型项目开发中往往,用ant来维护整个代码的编译,打包和测试。而在测试前往往会进行环境的配置,这些配置往往是由ant来完成,所以测试的入口也是从运行ant开始的,但是我们又想对某个junit的测试代码进行调试就不好处理了。
解决办法:在ant脚本中,对junit启动远程调试功能。
eclipse中有远程调试功能,可以对非同一个jvm中运行的java程序进行调试。相关的方法可见:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/
在ant中要使用相同方法,也不复杂。
假设要调试一个junit测试:
<JUnit printsummary="yes" fork="yes" dir=".">
<jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9002"/>
....
<batchtest>
<fileset dir="tests/src">
<include name="**/jaxrpc/TestUtils.java"/>
</fileset>
</batchtest>
</JUnit>
注意红色部分,此时这个junit启动了远程调试,当ant运行至此会打印waiting for vm to connect at port 9002...。此时新建一个远程调试连接到9002,在这个测试的对应java代码上打上断点,就能进行调试了。
同样的方法,所有支持<jvmarg >标签的任务都能这么来调试。