嵌入的kafka在多个scalatest套装中生成时引发异常

oknrviil  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(378)

下面是如何配置我的测试服。

"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" 在第一个测试运行后,它内部的后续测试会出现问题。如果我分别运行这两个测试中的每一个,它们将成功,但是如果我运行整个套装,第一个测试将成功,第二个测试将返回 org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition. 例外。上面的代码没有显示正在测试的控制器中的代码,但是在控制器中,我有一个kafka消费者,它不断地进行轮询和测试 close() 在测试中没有调用它。

iezvtpos

iezvtpos1#

我建议你使用伴随对象方法 EmbeddedKafka.start() 以及 EmbeddedKafka.stop()beforeAll 以及 afterAll 部分。这样,您也可以避免为单个测试类再次停止/启动kafka。
还要确保您没有试图在同一时间在同一端口上启动2个或多个Kafka示例。

相关问题