2010-11-22 78 views
4

我有一個Java程序,其主要方法(在​​主類中)需要命令行參數。該程序也是併發的(使用線程和東西)。如何測試需要cmd行參數的併發Java程序?

我想對程序進行大規模的重構。在我開始重構之前,我想爲主要方法創建一個測試套裝。我想用不同的cmd行參數來測試主要的方法。我會在每個重構步驟完成後自動運行這些測試。我如何創建一個傳遞cmd行參數的測試?

我不能使用JUnit,因爲據我所知它並不適用於併發程序。我也不確定你是否可以通過JUnit傳遞cmd行參數。

我正在使用eclipse。

回答

0

考慮使用JMeter。通過JUnit sampler,您可以輕鬆地進行併發JUnit測試,並查看結果。有關更多詳情,請參閱this question

0

我不熟悉專門爲多線程提供的各種自動化工具,所以我不會對它們發表評論。但是,簡單但有效的選擇是將正在運行的程序的關鍵事件記錄到CSV文件。您可以記錄最終結果(如果它是計算類型程序)或在程序中的某個鍵狀態發生更改或事件發生時的每個實例註銷。因爲它是一個多線程應用程序,所以如果不能保證您期望看到的鍵事件的相對順序,然後使用鍵值類型結果比較輸出,則必須注意比較記錄數據的順序。無論哪種方式,這個想法將創建測試數據文件,您可以使用它來進行後測試時的自動比較。

0

Awaitility也可以幫助您編寫確定性單元測試。它允許您等待系統中某個狀態更新。例如:

await().untilCall(to(myService).myMethod(), greaterThan(3)); 

await().atMost(5,SECONDS).until(fieldIn(myObject).ofType(int.class), equalTo(1)); 

它還具有Scala和Groovy的支持。

await until { something() > 4 } // Scala example