我正在尝试编写一些代码,作为更大的集成测试的一部分。
我有一个函数可以创建类型为KinesisSource
的{{1}}:
Source[KinesisRecord, Future[Done]
我想从文件中创建相同类型的伪造源。我有(对不起代码,我是scala的新手):
protected def createKinesisSource(config: KinesisClientLibConfiguration): Source[KinesisRecord, Future[Done]]#Repr[MyFile.KinesisFlow] = {
KinesisSource(config).mapAsync(1)(processRecord)
}
protected def processRecord(record: KinesisRecord): Future[KinesisFlow] = {
Future { validateRecord(record) }
}
这给了我val records = scala.io.Source.fromFile("testFile.txt").getLines.toList
.map(i => {
new KinesisRecord( ByteString.fromString(i), "x", None, "x", None, Instant.now(), "x")
})
Source(records).mapAsync(1)(processRecord)
。如何将其更改为Source[KinesisRecord, NotUsed]
?我知道第二个参数是具体值(see this post),但是我不确定在不实际应用Source[KinesisRecord, Future[Done]]
函数的情况下如何指定该值。
答案 0 :(得分:2)
您可以使用mapMaterializedValue(_ => Future.successful(Done))
或Future.never
但是,如果物化价值在您的集成测试中产生影响,那么这将对其产生影响,因为未来将在物流物化后立即完成,或者永远不会完成。