2012-11-21 70 views
0

我目前正在嘗試生成代碼,編譯它然後將其作爲JUnit4測試運行。我非常接近目標,但是我有一個問題,可能是使用plexus-compiler-eclipse或我如何加載編譯的類。讓我來解釋:使用plexus-compiler-eclipse編譯java類並將其作爲JUnit測試運行

  1. 我寫一個文件使用一個簡單的FileWriterWithEncoding
  2. 我用叢編譯月食(也試圖與plexus-編譯成的Java6代碼(源 - 目標達標)Java代碼使用EclipseJavaCompiler()。performCompile(CompilerConfiguration)編譯器的javac)
  3. 我使用URLClassLoader.newInstance(new URL[] {resource }).loadClass("classname")其中資源被getClass().getResource("filename")(也試圖與getClass().forName(className, true, classLoader)其中類加載器是相同的URLClassLoader如上加載類)
  4. 然後,我使用的一個實例JUnitCore使用JUnitCore()運行我生成的測試類(上面裝載的類的結果)

似乎一切都很好,直到4點,這裏的JUnit沒有看到在類中的任何測試方法(很明顯我並與@ org.junit.Test註釋在生成的每個測試方法碼)。調試,我可以看到,如果我在加載的類上執行newInstance()或檢查加載的類,我沒有註釋,沒有公共方法,沒有聲明的字段,SFA! newInstance()只有一個私有成員,這是正常的,因爲它的引用類型是Object,但不知怎的,我無法將它轉換爲嘗試調用應該存在的公共方法。

任何想法,我在我的編譯/類加載,使運行時類不完整,缺少什麼?

在此先感謝您的任何想法...

回答

0

很顯然,這是非常簡單!我發現this answer,這讓我意識到我的URLClassLoader錯過了父母。