2016-11-18 40 views
0

是否有任何方法使用Akka Actor Test Kit從ActorRef獲取底層Actor?從ActorRef獲取Akka測試工具包的底層Actor

我知道TestActorRef,但我不能在我的測試中使用它們,因爲Actor在我的應用程序中深度實例化。我能得到的只是他們的參考。用消息傳遞測試一切將是一個痛苦。

謝謝!

回答

1

你正在嘗試的是阿卡非常不好的反模式。演員及其互動的全部目的是隔離 - 從外部隱藏演員實例。

如果您要檢查您將繼續競爭競爭條件的Actor實例,因爲此類訪問不受Actor對「假如」單線程保證的保護。

我強烈建議用這種方式構建和組合演員,以便能夠測試他們正在建模的交互,而不必直接檢查其內部狀態。例如,你可以有方法要求演員給它的內部狀態等等。要點是,它是有目的的,你公開的狀態可能與實際保存在實例中的狀態不同(更容易進化和改變內部表示)。

+1

我強烈反對你。例如,將一個調度程序作爲「Actor」,通過消息傳遞來測試其(複雜)內部狀態顯然是一種痛苦。這意味着很多樣板消息代碼,我認爲'TestActorRef'已經被髮明是有原因的。唯一的問題是,要使用TestActorRef進行全面的集成測試,實際上會混淆演員的部署,以獲取TestActorRef。正如你提到你自己,有測試方法,導出內部不可變狀態會很好。 – Dyin

+0

@Dyin你可以提供某種演員創建工廠,你可以在你的測試中覆蓋,所以他們創建測試演員,而不是真正的演員,然後你有'TestActorRef' –

+0

@JosepPrat聽起來像一個好主意。謝謝! – Dyin