【发布时间】:2020-08-30 04:30:59
【问题描述】:
我有一个应该向 Cassandra 写入条目的读取端,我想编写一个测试以确保将事件发送到读取端,然后在 Cassandra 中检查该行确实已被写入。我应该如何在测试中访问 Cassandra 会话?
【问题讨论】:
我有一个应该向 Cassandra 写入条目的读取端,我想编写一个测试以确保将事件发送到读取端,然后在 Cassandra 中检查该行确实已被写入。我应该如何在测试中访问 Cassandra 会话?
【问题讨论】:
我这样做是这样的:
class MyProcessorSpec extends AsyncWordSpec with BeforeAndAfterAll with Matchers {
private val server = ServiceTest.startServer(ServiceTest.defaultSetup.withCassandra(true)) { ctx =>
new MyApplication(ctx) {
override def serviceLocator = NoServiceLocator
override lazy val readSide: ReadSideTestDriver = new ReadSideTestDriver
}
}
override def afterAll(): Unit = server.stop()
private val testDriver = server.application.readSide
private val repository = server.application.repo
private val offset = new AtomicInteger()
"The event processor" should {
"create an entity" in {
for {
_ <- feed(createdEvent.id, createdEvent)
entity <- repository.getEntityIdByKey(createdEvent.keys.head)
entities <- repository.getAllEntities
} yield {
entity should be(Some(createdEvent.id))
entities.length should be(1)
}
}
}
private def feed(id: MyId, event: MyEvent): Future[Done] = {
testDriver.feed(id.underlying, event, Sequence(offset.getAndIncrement))
}
}
【讨论】: