2015-07-10 60 views
0

背景:在不同的項目中使用JunitCore用於測試

我目前的工作在Eclipse中的一個項目,編程執行被推到服務器JUnit測試。

到目前爲止,所有的工作,但我想知道測試的結果(特別是任何失敗),所以我可以推出他們的電子郵件。現在測試只是輸出到控制檯,但似乎並沒有給我太多的輸出實際使用。

現在我使用Runtime類來調用測試,但似乎沒有獲得結果所需的功能。 我已經看過JUnitCore類,但不能調用當前Java項目之外的任何測試。


所以我的主要問題是如何使用JUnitCore在特定的JAR文件中運行junit測試?還是有更簡單的方法來解決這個問題,使用不同的類?

這是我已經能夠得到工作的唯一的事:

RunTests() 
    { 
     junitCore = new JUnitCore(); 

     junitCore.run(AllTests.class); 
    } 

但我想一起做的這個東西線:

RunTests() 
    { 
     junitCore = new JUnitCore(); 

     junitCore.run("C:\\$batch\\test\\hil research\\201507071307\\CommsTestRunner\\plugins\\TestSuite\\US35644.class"); 
    } 

我將不勝感激任何對此問題的建議我有。我是一個EE,上個月剛剛介紹給java,所以這對我來說是一個很大的挑戰。

回答

0

JUnitCore希望讀取加載的類,而不是JAR中的類文件。您真正的問題可能是如何加載JAR(或.class文件的目錄),以便它可以運行。

撥打URLClassLoader;一旦你適當地修改了類路徑,你可以從findClass中得到一個類,並將它傳遞給你找到的JUnitCore方法。

0

由於測試可能有您的服務器也使用的類(但不一定在同一版本),我建議不要讓您的服務器直接運行測試。相反,您可以讓您的服務器啓動一個運行測試的新JVM。這就是Eclipse如何運行測試的IDE。您只需編寫一個具有JUnit運行測試的主類,並將結果序列化到磁盤上。

主類將是這個樣子:

public class MyRunner { 
    public static void main(String... args) throws IOException { 
    String path = System.getProperty("resultPath"); 
    if (path == null) { 
     throw new NullPointerException("must specify resultPath property"); 
    } 

    // Possibly install a security manager to prevent calls to System.exit() 

    Result result = new JUnitCore().runMain(new RealSystem(), args); 

    try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path)) { 
     out.writeObject(result); 
    }  

    System.exit(result.wasSuccessful() ? 0 : 1); 
    } 
} 

然後你的服務器只需要構建與包括測試,JUnit的jar文件,以及包含MyRunner一個jar罈子裏一個java命令行。

相關問題