在單元測驗中驗證 akka-stream 源的慣用方法是什么?我這樣做:
f.service.fetchData(id).flatMap {
case Right(source) => {
// TODO: I need to validate here that source contains "Test value"
}
case Left(_) => fail("Wrongly responded with error")
}
來源基本上是:
Source.single(ByteString("Test value"))
我嘗試通過將 Source 連接到 Sink 并檢查發出的值來執行,但斷言似乎不起作用。
uj5u.com熱心網友回復:
測驗 Sources、Flows 和 Sinks 的正確方法是使用測驗探針。
鑒于以下來源您要測驗的女巫的邏輯
val source = Source(Seq("TestValue")).collect {
case s @ "TestValue" => Right[String, String](s)
case _ => Left[String, String]("error")
}
(我知道這Left永遠不會在這里觸發,但這只是一個例子)
現在,您可以定義TestSink連接到給定源的 。結果圖按以下方式執行
"assert correct value" in {
implicit val system: ActorSystem = ???
val probe = source.toMat(TestSink.probe)(Keep.right).run()
probe.request(1)
probe.expectNext(Right("TestValue"))
}
TestSink.probe是一個具體化為 a 的接收器TestSubscriber.Probe[T],它提供對流的控制。由于它是一個接收器,它需要發出對元素的需求。它通過request(1)或請求一個元素來完成。然后是斷言sink.expectNext(Right("TestValue"))檢查是否收到了正確的值。
還有一個叫做TestSource.probe允許測驗Sink.
通過結合這兩者,您可以測驗一個Flow.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/377873.html
上一篇:以這樣的方式將日期加一,使其成為下一個作業/作業日日期
下一篇:如何從scala中的地圖更改鍵
