使用JUnit運行測試時我得到ClassNotFoundException
:ClassNotFoundException的使用JUnit使用Class.forName(..)的getInstance時,而新的()工作正常
我有一大堆的測試用例,測試類爲主。 Main類有一個方法,它接受一個表示數據類型的字符串,並使用Class.forName(argument).newInstance()
在內部建立一個類型的實例。現在,當我手動測試時,方法本身工作正常。但在使用junit運行測試用例時,我得到ClassNotFoundException
(在該方法中)傳入的數據類型。
然後我添加了一行:新的MyDataType被測試的方法。奇怪的是,opration成功,而我通過Class.forName(MyDataType).newInstance()
創建實例的後續行失敗。
Class Main{
public void someMethod(String dataType){
new MyDataType(); // suceeds
Class.forName(dataType).newInstance(); // got Exception when dataType = "MyDataType"
}
}
這是爲什麼?當我谷歌搜索時,我發現一些答案暗示MyDataType.class
可能不在classpath
。由於新MyDataType()
運行良好,我不認爲這是這種情況。
我的運行時和構建時間類路徑包括包含所需類的jar。
沒有看到你的代碼,你怎麼樣清理項目,然後再次運行這個測試的任何問題,有時我得到這個這種問題並修復它。 – OQJF 2013-03-11 05:17:30
已經嘗試過了,不工作! – broun 2013-03-11 05:23:00
雖然我認爲原因是Class.forName(),原因是新的MyDataType()只是創建實例,而Class.forName()必須保證該類已被jvm加載或它會得到例外:classNotFound。 – OQJF 2013-03-11 06:00:07