嵌入式kafka在多个scalatest诉讼中生成时抛出异常

时间:2016-07-12 18:28:18

标签: apache-kafka scalatest

以下是我的测试套装的配置方式。

  "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()

1 个答案:

答案 0 :(得分:3)

我建议您在EmbeddedKafka.start()EmbeddedKafka.stop()部分使用随播对象方法beforeAllafterAll。这样你也可以避免再次为一个测试类停止/启动Kafka。

同时尝试确保您不会同时尝试在同一端口上启动2个或更多Kafka实例。