1. 程式人生 > >TestNG導致Test執行不了

TestNG導致Test執行不了

筆者按:
    這個是一篇老文了,之前解決出來發到郵件群裡了,換了筆記本發現郵件沒有了。今天不經意間又發現了,防止再次失蹤,於是記錄到部落格裡,以作備案。

關於什麼是jtester,可以看下這個論壇貼子。
http://www.iteye.com/topic/900975

正文:

筆者今日發現,自己新裝Eclipse3.5,下載的JTester工程,裝了TestNG外掛,寫一個JTester的單元測試。
但執行都報錯了。其他同事執行的單元測試卻沒有問題,覺得奇怪。剛開始懷疑是JDK問題,
我下載了JDK1.6.0.17,JDK1.6.0.20,JDK1.6.0.22都不行。還是報同樣的錯誤:

現象:
Java程式碼  收藏程式碼
  1. Setting connection parameters:
    127.0.0.1:39337
  2. init jmockit:true
  3. Exception in thread "Attach Listener" java.lang.reflect.InvocationTargetException  
  4.    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  5.    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  6.    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25
    )  
  7.    at java.lang.reflect.Method.invoke(Method.java:597)  
  8.    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)  
  9.    at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:348)  
  10. Caused by: java.lang.IllegalArgumentException: Matching real methods not found for
     the following mocks:  
  11. Object invokeMethod(reflect.Method, Object, Object[])  
  12.    at mockit.internal.RedefinitionEngine.modifyRealClass(RedefinitionEngine.java:259)  
  13.    at mockit.internal.RedefinitionEngine.modifyRealClass(RedefinitionEngine.java:235)  
  14.    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:209)  
  15.    at mockit.internal.RedefinitionEngine.setUpStartupMock(RedefinitionEngine.java:185)  
  16.    at mockit.internal.startup.Startup.setUpInternalStartupMock(Startup.java:181)  
  17.    at mockit.internal.startup.Startup.loadInternalStartupMocks(Startup.java:161)  
  18.    at mockit.internal.startup.Startup.initialize(Startup.java:139)  
  19.    at mockit.internal.startup.Startup.agentmain(Startup.java:128)  
  20.    ... 6 more  

分析:

我通過DEBUG程式碼,發現在jtester包中的Startup類中執行loadInternalStartupMocks方法裡報錯具體在這一行:
Java程式碼  收藏程式碼
  1. privatestaticvoid loadInternalStartupMocks()  
  2.    {  
  3.       setUpInternalStartupMock(TestSuiteDecorator.class);  
  4.       setUpInternalStartupMock(JUnitTestCaseDecorator.class);  
  5.       setUpInternalStartupMock(RunNotifierDecorator.class);  
  6.       setUpInternalStartupMock(BlockJUnit4ClassRunnerDecorator.class);  
  7.       setUpInternalStartupMock(TestNGTestRunnerDecorator.class); //這裡丟擲了異常
  8.       TestRun.mockFixture().turnRedefinedClassesIntoFixedOnes();  
  9.    }  

JTester在啟動時設定各個測試框架的Mock時,唯獨TestNG的報錯了。於是我開始驗證,
1.建立繼承以Junit4的JTester的測試類,可以正常執行;
2.單獨建立基類是TestNG也可以執行
3.建立擴充套件以TestNG為基礎的JTester無法執行。
所以,我得出結論,當前TestNG外掛版本與JTester是不相容的。

我檢查了自己執行的TestNG外掛版本,在Eclipse這裡檢視:(圖中的TestNG筆者已經解除安裝掉)



驗證:
發現TestNG版本是5.14.2.9。該版本是通過eclipse中的install new software 中http://beust.com/eclipse這個地址下載。
而其他同事(執行正常)的版本是:5.14.0.1,或者5.13.x。
於是我先點選Uninstall將TestNG版本刪除,退出eclipse,到eclipse的安裝目錄,將plugins中的org.testng.eclipse_5.14.2.9的目錄刪除(這樣才能徹底刪除)。
再從http://testng.org/testng-eclipse-5.14.0.1.zip這裡下載。將其解壓,拷貝到plugins目錄下。你 也可以使用附件中jar檔案,將他拷貝到eclipse安裝目錄下的plugins中。安裝重啟Eclipse,之後再執行單元測試,JTester又出現了綠色!
總結:
如果你要開始使用JTester,請不要使用http://beust.com/eclipse的Update方式下載TestNG外掛,直接使用org.testng.eclipse_5.14.0.1.jar檔案。

相關推薦

TestNG導致Test執行

筆者按:     這個是一篇老文了,之前解決出來發到郵件群裡了,換了筆記本發現郵件沒有了。今天不經意間又發現了,防止再次失蹤,於是記錄到部落格裡,以作備案。 關於什麼是jtester,可以看下這個論壇貼子。http://www.iteye.com/topic/900975 正文: 筆者今日發現,自己新裝Ecl

錯誤點選jar包將導致bat檔案和exe視窗執行,jar包執行

伺服器部署jar包,在這裡提供兩種執行方式和錯誤點選jar包的解決辦法 1.鍵盤 windows+R鍵輸入cmd 按照以下方式輸入: (1) D:        ==> (2) cd D:\hdd\grjbxx ==>(3)java -jar aaa.j

C程序fork進程導致PHP執行退出

printf alfred 文件描述 pre 處理 demo 文件描述符 time_t 狀態 /********************************************************************* *

我的MAC可能在設置環境變量的時候設置錯,現在整個MAC的vi,ls等命令都執行

kdt usr targe 暫時 path tar spf 是你 highlight 1,在命令行中輸入export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin這樣可以保證命令行命令暫時可以使用。命令執行完之後先不要關

vue專案執行

報錯如上,首先下載node-sass   npm install node-sass -g 檢查是否安裝好   node-sass -v 如上圖,已裝好,然鵝,還是執行不了 安裝sass-loader  npm i

iview npm run dev執行

iView 是一套基於 Vue.js 的開源 UI 元件庫,主要服務於 PC 介面的中後臺產品。 最近在使用的過程當中,碰到一些問題記錄下來,供大家參考 : 在下載了官方提供的工程檔案 iview-projcet後,執行npm run dev ,會報錯,像下面這樣的: > [email

解決docker在CentOs7中安裝好執行問題

用yum方式安裝docker遇到錯誤的以下問題: Docker 無法啟動 [[email protected] 桌面]# yum update [[email protected] 桌面]# yum install docker [[email prot

安裝homebrew,執行brew指令

安裝homebrew的方法,參見https://blog.csdn.net/weixin_40197494/article/details/82595049 但是安裝好了,卻無法使用brew指令 這就需要進一步修改 .bash_profile檔案 輸入指令 sudo vim .bash_pr

全域性安裝webpack,在cmd裡面卻執行

前端時間在用webpack,然後發現了一個小問題,列出來記錄一下 首先,我是用淘寶映象來安裝的: npm install -g cnpm --registry=https://registry.np

為什麼會執行,有大神可以幫幫我嗎?

#include<stdio.h> int star();  float area(float x); float tiji(float x,float y); int main() {  float x,y;  scanf("%f%f",&

解決linux由於防火牆導致tomcat訪問

Centos7下,部署了tomcat7,但是根據日誌等查詢,tomcat服務已經啟動,沒有任何錯誤,卻不能訪問。命令列輸入:ps -ef|grep tomcat出現以上資訊,說明tomcat已經啟動成功。第一個是啟動該程序的使用者  :root第二個是該程序的id :4720

前端 js 指令碼執行,jquery庫跟$(id).onclick 衝突

問題描述 此問題把我弄得欲哭無淚,浪費了我一整天的時間,前端太蛋疼,特備是js,我連報錯的地方都不知道在哪裡,才疏學淺,只能一個alert 輸出出來,看那一段程式碼輸出不出來,好吧,先說一下問題: (1) js程式碼執行不出來 (2) jque

linux新增環境變數對/etc/profile檔案進行修改過後導致命令用

在使用java的時候,要新增環境變數。一般我們是export一些變數,比如: export JAVA_HOME=.... export PATH=$PATH:$JAVA_HOME/bin 但是,當我們在export PATH的時候忘記在等號右邊加紅色的$PATH:

jmeter再新增CSV Data Set Config元件後就執行,禁用後又可以正常執行,求大神指教。

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能拓

Sublime突然執行python檔案_提示FileNotFoundError(2,'')

開啟cmd 輸入python 發現提示:python 不是內部或外部命令 同時依然能找到python.exe 解決方法: 1.找到python路徑 開啟python.exe(win10可直接左下搜python) 輸入: >>>import sys >

windows環境下VS2008編譯程式在有些電腦上執行的問題

最近遇到一種情況,在windows下,用vs2008編譯程式,在本機(XP系統)可以執行,但放在別的系統上執行不了。這種情況是由於執行庫在別的系統上沒有,也許可以安裝執行庫能解決這個問題,但是,這樣似

crontab執行php的解決方法

一、php檔案有沒有執行許可權,條件允許可以把檔案許可權設為777 二、如果有了執行許可權還是執行不了,解決方法如下: 1,在php程式裡面寫log(例如:error_log()這個函式),這也是必須的,因為crontab定時執行,要是沒有log,你怎麼知道程式執行的結果

IDEA 2017 普通web專案 tomcat run可以正常執行,debug執行,說找到系統找到指定的路徑。

各位路過的大佬行行好,怎麼解決,小弟已經兩天沒解決了。。。控制檯列印資訊:D:\Tomcat\apache-tomcat-6.0.37\bin\catalina.bat run[2018-05-30 05:58:51,864] Artifact xxxx:war explod

為什麼程式執行?求解

#include<iostream> #include"string" #include"cstring" using namespace std; class Person {int age;char *name;char gender; public:voi

./node_modules/.bin/webpack 執行

相信絕大部分初學webpack或是gulp等等的人都不會遇到這個問題,因為一開始執行webpack都會先安裝全域性的webpack,然後在專案中安裝區域性的webpack,然後使用webpack [命令] 去執行,這並沒有什麼不對的,但是有個缺點,就是在不同環境