2012-03-23 18 views
3

我們的Java應用程序有許多實現通用接口的模塊。按照設計,每個模塊都有良好的封裝和互換性。所有呼叫通過一小組接口進行。記錄/重播Java方法調用的工具

我們需要儀器這種機制來補充,

  1. 記錄方法調用和結果 - 在一個結構化的格式
  2. 重播相對於模塊的調用,調試的問題時,或測試修復。
  3. (很好)將記錄的交互作爲「預期」結果使用,當運行JUnit測試時,將它們與「實際」進行比較。
  4. (可能 - 應該有)完全線程安全。

是否有建議在此選擇?

我在看了幾個選擇:

+1

我有一個類似的問題。錄製和回放可以使用[testrecorder](http://testrecorder.amygdalum.net/)完成。有關更多詳細信息,請參閱https://stackoverflow.com/a/46680587/4497253。 – CoronA 2017-10-23 04:54:26

回答

1

假設你是非常嚴格的遵守你的小組接口,那麼你可以使用包裝對象的那些如下:

  • 實現接口
  • 日誌/記錄輸入
  • 代表調用底層對象
  • 日誌/記錄結果
  • 返回結果給呼叫者

您還可以修改工廠方法以返回包裝對象而不是基礎對象,以便這些包裝的使用相當透明。

請注意,您需要非常小心參數的可變性:理想情況下,所有參數都是不可變的,但如果不是,您需要採用深層副本(可能是通過序列化)。

理論上你也可以使用已記錄的輸入來啓用播放和/或測試....但我會對此期望過於謹慎,因爲回放需要你捕獲全部相關狀態(包括外部狀態,如數據庫事務,文件系統訪問等)。通常這很難實現,儘管您可能可以使其在特定情況下工作。

+0

感謝您的想法。是的,大多數代碼將依賴於外部環境狀態...所以如果沒有現成的解決方案,我想這並不令人驚訝。 但是,或許至少,我可以用喜鵲代碼來幫助我建立我的... – Iain 2012-03-23 06:10:45