一般来说,在Eclipse中调试Junit测试只需要右键文件,然后选择debug as -> Junit Test就行了。但是,我这次碰到的Junit测试无法使用该方法,故在此记录解决方案。
解决方案的关键:使用mvn指令进入调试模式。
这个项目是一个专门的test suite项目,里面只存了test文件(专门用来做测试的)。其测试使用的maven依赖是:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> </dependency>如下图,我无论是右键这个测试文件,还是右键其中的Junit测试方法,在debug as中都没有Junit Test的选项。
我惊了。然后还试了很多其他方法,比如右键src/test/java文件夹,运行debug as Application,但是没有用,会显示downloading JDK langtools,然后报错zip failure。然后就是一系列比较坑的提示,差点还让我下载了jdk9(实际上没必要!)
1)进入该项目pom.xml文件所在的目录,在该目录下打开terminal (我是Ubuntu系统,在windows下应该也差不多,shift+右键可以打开powershell); 2)输入mvn -Dtest=JavaTokenTest -Dmaven.surefire.debug test, 其中JavaTokenTest是你想测试的测试类(也可以替换成该项目下的其他测试类);
此时terminal显示:
[INFO] [INFO] --- maven-surefire-plugin:3.0.0-M1:test (default-test) @ javaparser-core-testing --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Listening for transport dt_socket at address: 5005注意这里的Listening for transport dt_socket at address: 5005,5005端口后面会用到。 3)在Eclipse中找到该项目下的JavaTokenTest文件,设置断点,然后上方菜单栏->debug configurations,会弹出如下窗口(如下图),在左侧找到Remote Java Application,在中间填5005端口,然后点击Debug,Eclipse就会进入Debug mode,然后就可以顺利debug了。
debug的界面如下图:
花了一下午的时间,先是fork了一下这个项目,然后配置了一下gitee,然后clone这个项目到本地,切换到指定版本,编译这个项目,在Eclipse中导入这个项目,一开始导入的时候还老有错误。调了一会儿之后(主要是要configure build path)才解决。
然后到调试的时候懵了,卡了很久。都没办法在Eclipse中调试。
最后我注意到: 既然用mvn test可以运行测试,那么我在搜索参考文献的时候应该用这样的关键词:java maven test debug,然后就找到了适合我这个问题场景的参考方案。
总言之,自己还是要多学习,软工里面要学的东西不少,自己所学只是沧海一粟中的沧海一粟