我正在做一個網絡應用程序Scala
和Akka
演員,我在tests
有一些麻煩。單元測試AKKA actors
對我來說,我需要去品味誰與數據庫會談演員。要進行單元測試,我想使用假數據庫,但是我無法用我想要的假對象替換新的數據庫。
讓我們來看看一些代碼:
Class MyActor extends Actor {
val database = new Database()
def receive = { ... }
}
而且在我想注入FakeDatabase對象,而不是數據庫的測試。我一直在尋找互聯網,但我發現的最好的是:
- 將一個參數添加到構造函數。
- 轉換的
val
數據庫到var
所以在測試中我可以訪問由基礎屬性和替換它。
這兩種解決方案解決這個問題,但都非常髒。
不是解決問題的更好的辦法?
謝謝!
我不會稱之爲「添加參數構造函數」髒。如果你考慮語義:可以演員沒有數據庫的功能?可能不會,所以構造函數對它來說是一個非常好的地方,因爲你明確指出要創建actor,它需要傳遞一個數據庫。 –
我不是專家,但在你的測試中,你可以覆蓋數據庫是這樣的:new MyActor {override val database = new FakeDatabase} – user24601
我認爲它可以工作,這是最簡單的解決方案。謝謝 – mtrebi