2014-11-14 80 views
0

我正在使用AnyLogic運行JUnit 4。在我的一個測試中,我需要訪問運行測試的Experiment。有沒有任何干淨的方式來訪問它在運行時?例如,是否有一種與Experiment.getRunningExperiment()一致的靜態方法?在運行時獲取當前的實驗實例

回答

1

我沒有知道的靜態方法(如果有的話,它可能會由允許並行執行的多次運行實驗變得複雜,但也許不會,因爲仍然有一個實驗,是線程安全問題)。

但是,您可以使用getEngine().getExperiment()範圍內的模型。您可能需要解釋更多關於您的使用情況。如果您使用AnyLogic Pro並導出模型以獨立運行,那麼無論如何您都應該可以訪問實驗實例(如幫助「無需UI從外部運行模型」)。

您是否試圖從內運行JUnit測試一個實驗?如果是這樣,你的一般設計是什麼?顯然,JUnit在這種情況下並不會很好,因爲它期望'實例化和運行要測試的東西。對於我的自動化測試(我不能單獨導出它,因爲我沒有使用AnyLogic Pro),我認爲避免JUnit(它畢竟只是一個框架)更容易,並直接實施測試(通過讓我的模型組件會寫出輸出,並且在實驗運行結束時,讓實驗將輸出與預先準備好的預期輸出進行比較,如果測試通過或失敗,則標記輸出。使用AnyLogic Pro,您仍然可以單獨導出並使用JUnit來運行'已經測試過的'實驗(使用JUnit測試檢查實驗的末尾是否設置了testPassed布爾值等)。

事實上,你想得到運行實驗表明,你可能會這樣做,而運行有潛在的執行。如果是這樣,你能否解釋一下你的要求?

+0

我從一個實驗中運行JUnit測試,是的。我沒有用它來測試整個模型:我用它來測試*模型組件*(畢竟,這就是JUnit和單元測試的重點)。我的測試斷開了人員,建築物和子系統等等,並且單獨測試它們。對於非代理商來說,這很容易。對於代理商來說,那需要一些時間。我會在它們上使用'getEngine()',但問題是我必須首先給它們一個'Engine',這就是爲什麼我需要這個調用。現在我有一個工作「解決方案」,但它肯定是一個黑客。 – 2014-11-17 17:35:49

+0

好的;我假設你是單元測試組件。但是您可以設置頂級代理,它們只是組成測試中的組件(如果需要,使用假/模擬代理/對象),並且由於它們在實驗中運行,因此它們可以訪問Engine實例。然後讓他們根據需要爲您的測試輸出文件(例如,使用Java日誌記錄)和/或使用普通的Java斷言。 – 2014-11-18 09:48:01

+0

但是我同意,如果你可以讓JUnit在實驗裏面工作,這將是一件很酷的事情,它只是一個'shell'來稱呼它。您可能需要更多地解釋您的設計,以考慮可能的可能性;例如,如果代理不直接包含在另一個代理中,您如何實例化代理?無論如何,我對你的建築非常感興趣,所以請隨意分享給我。 – 2014-11-18 09:49:28

相關問題