2010-08-12 95 views
3

我在一個複雜的多模塊maven項目上工作。其中一個模塊是一個執行命令行應用程序的可執行jar。我需要整合測試這個應用程序。我需要多次運行它,使用幾個不同的命令行並驗證退出狀態和stdout/err。然而,我找不到聲明支持這個的maven插件,也無法找到支持測試命令行應用程序的JUnit庫。如何使用maven測試命令行應用程序?

在你說'不測試主要方法 - 反而做bla',在這種情況下我真的的意思是測試主要方法,而不是一些輔助功能。整個過程是在自己的虛擬機和環境中以用戶的身份運行應用程序,並驗證它是否正常工作 - 正確解析命令行選項,退出寫入狀態並從正確的類加載正確的類右插件罐子。

回答

0

爲什麼不簡單地使用shell腳本,使用maven-exec-plugin來構建你的類路徑?

STDOUT=$(mvn exec:java -DmainClass=yourMainClass --arg1 --arg2=value2) 
RETURN_CODE=$? 

# validate STDOUT 
# validate RETURN_CODE 

如果您更喜歡更結構化的方法,您甚至可以使用類似shunit2的東西。

+0

問題在於它是平臺特定的。我意識到,任何與運行命令行應用程序有關的東西都會有一些只能在windows或linux上運行的東西,但是在sh中編寫測試腳本可能會走得太遠。 – drdozer 2010-08-13 11:33:18

1

我目前的做法是使用junit測試方法中的apache-exec。它似乎在工作,但設置起來相當繁瑣。

public void testCommandlineApp() 
     throws IOException 
{ 
    CommandLine cl = new CommandLine(resolveScriptNameForOS("./runme")); // add .sh/.bat 
    cl.addArgument("inputFile.xml"); 

    exec.setWorkingDirectory(workingDir); 
    exec.setExitValues(new int[] { 0, 1, 2 }); 

    int exitCode = exec.execute(cl); 

    assertEquals("Exit code should be zero", 0, exitCode); 
} 
+0

您也可以使用標準的ProcessBuilder類,但是,它很煩瑣。 (分解一些更加煩瑣的位...) – 2010-08-13 11:48:34