我有 2 個問題。
- 我正在使用 Akka typed 制作后端并想進行測驗。簡單的方法,沒有依賴注入,自動裝配等。所以我有一個特點
trait Repository {
def create(h: Model): Future[Int]
def get(id: Long): Future[Model]
}
所以 2 個類正在擴展這個特征 -DatabaseRepository并且InMemoryRepository
InMemoryRepository 應該用于測驗。最簡單的解決方案是創建mutable.Map用于存盤物體的成員,并在每次創建操作時對其進行更新。然而,這正在改變一個狀態。我知道這些是測驗,但即使在測驗中也可能需要同時創建物體。
另一種可能更實用的方法是讓 create 方法回傳一個 Tuple (InMemoryRepository, Int),以便在撰寫 Futures 或任何效果時可以傳遞它。
也許一個解決方案是創建一個簡單的 State monad,它將存盤一個Map實作flatMap方法,該方法可以在需要時用于理解和所有其他地方,并且隱藏變異狀態。
您可能對此有更好的方法嗎?
- 傳遞配置值的最佳方法是什么?我創建了一個包物件并在那里有一個變數,例如
dbHost,thirdPartyUrl(從配置加載)。然后我在需要的地方包含這個包物件。
提前致謝
uj5u.com熱心網友回復:
沒有一個單一的,有據可查的方法,但這是我的。它有點長,所以我把它放在一個要點上。抽象出容器型別,就像在我的專案中一樣,我同時使用 Future 和 IO: https ://gist.github.com/V-Lamp/c8862030a2f9bba4951db985b61719b8
uj5u.com熱心網友回復:
如果InMemoryRepository僅用于測驗,則根本不需要實作它。只需使用模擬。例如:
val repo = mock[Repository]
val models = Seq(mock[Model], mock[Model], mock[Model])
models.zipWithIndex.foreach { case (m,i) =>
when(repo.create(m)).thenReturn(Future.successful(i 1))
when(repo.get(i 1)).thenReturn(Future.successful(m))
}
甚至更簡單,具體取決于您實際測驗的是什么:
when(repo.create(any)).return(Future.successful(100500))
when(repo.get(any)).return(Future(mock[Model]))
至于傳遞配置值,(implicit config: Config)經常使用類似的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412150.html
標籤:
