嵌入式 kafka 在多个 scalatest 套装中生产时抛出异常
Embedded kafka throws exception when producing within multiple scalatest suits
这是我的测试服的配置方式。
"test payments" should {
"Add 100 credits" in {
runTeamTest { team =>
withRunningKafka {
val addCreditsRequest = AddCreditsRequest(team.id.stringify, member1Email, 100)
TestCommon.makeRequestAndCheck(
member1Email,
TeamApiGenerated.addCredits().url,
Helpers.POST,
Json.toJson(addCreditsRequest),
OK
)
val foundTeam = TestCommon.waitForFuture(TeamDao.findOneById(team.id))
foundTeam.get.credits mustEqual initialCreditAmount + 100
}
}
}
"deduct 100 credits" in {
runTeamTest { team =>
withRunningKafka {
val deductCreditsRequest = DeductCreditsRequest(team.id.stringify, member1Email, 100)
TestCommon.makeRequestAndCheck(
member1Email,
TeamApiGenerated.deductCredits().url,
Helpers.POST,
Json.toJson(deductCreditsRequest),
OK
)
val foundTeam = TestCommon.waitForFuture(TeamDao.findOneById(team.id))
foundTeam.get.credits mustEqual initialCreditAmount - 100
}
}
}
在 Scalatest 中,最重要的套装名称是 "test payments"
,其中的后续测试在第一个是 运行 之后出现问题。如果我单独 运行 两个测试中的每一个,它们都会成功,但如果我 运行 整个花色,第一个成功,第二个 returns 一个 org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition.
异常。上面的代码没有显示正在测试的控制器内的代码,但在控制器内,我有一个不断轮询的 kafka 消费者,并且 close()
在测试中没有被调用。
我建议您在 beforeAll
和 afterAll
部分中使用伴随对象方法 EmbeddedKafka.start()
和 EmbeddedKafka.stop()
。这样,您还可以避免为单个测试再次停止/启动 Kafka class.
还要确保您没有尝试同时在同一端口上启动 2 个或更多 Kafka 实例。
这是我的测试服的配置方式。
"test payments" should {
"Add 100 credits" in {
runTeamTest { team =>
withRunningKafka {
val addCreditsRequest = AddCreditsRequest(team.id.stringify, member1Email, 100)
TestCommon.makeRequestAndCheck(
member1Email,
TeamApiGenerated.addCredits().url,
Helpers.POST,
Json.toJson(addCreditsRequest),
OK
)
val foundTeam = TestCommon.waitForFuture(TeamDao.findOneById(team.id))
foundTeam.get.credits mustEqual initialCreditAmount + 100
}
}
}
"deduct 100 credits" in {
runTeamTest { team =>
withRunningKafka {
val deductCreditsRequest = DeductCreditsRequest(team.id.stringify, member1Email, 100)
TestCommon.makeRequestAndCheck(
member1Email,
TeamApiGenerated.deductCredits().url,
Helpers.POST,
Json.toJson(deductCreditsRequest),
OK
)
val foundTeam = TestCommon.waitForFuture(TeamDao.findOneById(team.id))
foundTeam.get.credits mustEqual initialCreditAmount - 100
}
}
}
在 Scalatest 中,最重要的套装名称是 "test payments"
,其中的后续测试在第一个是 运行 之后出现问题。如果我单独 运行 两个测试中的每一个,它们都会成功,但如果我 运行 整个花色,第一个成功,第二个 returns 一个 org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition.
异常。上面的代码没有显示正在测试的控制器内的代码,但在控制器内,我有一个不断轮询的 kafka 消费者,并且 close()
在测试中没有被调用。
我建议您在 beforeAll
和 afterAll
部分中使用伴随对象方法 EmbeddedKafka.start()
和 EmbeddedKafka.stop()
。这样,您还可以避免为单个测试再次停止/启动 Kafka class.
还要确保您没有尝试同时在同一端口上启动 2 个或更多 Kafka 实例。