[解决方案] 在Eclipse中调试maven项目中的Junit测试用例

    技术2022-07-11  105

    文章目录

    前言1 问题场景 (嫌长亦可直接跳到第2节)2 解决方案3 总结参考文献

    前言

    一般来说,在Eclipse中调试Junit测试只需要右键文件,然后选择debug as -> Junit Test就行了。但是,我这次碰到的Junit测试无法使用该方法,故在此记录解决方案。

    解决方案的关键:使用mvn指令进入调试模式。

    1 问题场景 (嫌长亦可直接跳到第2节)

    这个项目是一个专门的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(实际上没必要!)

    2 解决方案

    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的界面如下图:

    3 总结

    花了一下午的时间,先是fork了一下这个项目,然后配置了一下gitee,然后clone这个项目到本地,切换到指定版本,编译这个项目,在Eclipse中导入这个项目,一开始导入的时候还老有错误。调了一会儿之后(主要是要configure build path)才解决。

    然后到调试的时候懵了,卡了很久。都没办法在Eclipse中调试。

    最后我注意到: 既然用mvn test可以运行测试,那么我在搜索参考文献的时候应该用这样的关键词:java maven test debug,然后就找到了适合我这个问题场景的参考方案。

    总言之,自己还是要多学习,软工里面要学的东西不少,自己所学只是沧海一粟中的沧海一粟

    参考文献

    How to Debug a Test Run with Maven
    Processed: 0.010, SQL: 9