前言
一般來說,在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
,然後就找到了適合我這個問題場景的參考方案。
總言之,自己還是要多學習,軟工裏面要學的東西不少,自己所學只是滄海一粟中的滄海一粟