Как использовать AsyncFeatureSpec? - PullRequest
1 голос
/ 21 апреля 2019

Я пытаюсь написать асинхронный тест с AsyncFeatureSpec следующим образом:

import java.net.ConnectException

import org.scalatest._


final class SapRsSpec extends AsyncFeatureSpec
  with Matchers
  with GivenWhenThen {

  feature("Kafka distribution to a server via websocket") {

    scenario("Send data to SAP server when Kafka is DOWN") {
      Given("Kafka server is NOT active")
      When("consumer client get started")
      val ex = SenderActor.run
      Then("print message `Failed to connect to Kafka`")
      ex.failed map { ex =>
        intercept[ConnectException](ex)
      }
    }

    scenario("Send data to a server when Kafka is UP") {
      Given("Kafka server is active")
      When("consumer client get started")
      Then("print message `Successfully connected to Kafka`")
    }

  }

}

компилятор жалуется:

Error:(20, 36) type mismatch;
 found   : java.net.ConnectException
 required: org.scalatest.compatible.Assertion
        intercept[ConnectException](ex)
Error:(27, 11) type mismatch;
 found   : Unit
 required: scala.concurrent.Future[org.scalatest.compatible.Assertion]
      Then("print message `Successfully connected to Kafka`")  

В первом сценарии я хотел бы проверитьпротив полученного типа исключения, и я не знаю, как это сделать.

1 Ответ

2 голосов
/ 21 апреля 2019

shouldBe сопоставитель может использоваться для проверки типа полученного исключения, например

ex.failed map { ex => 
  ex shouldBe a [ConnectException]
}

, который должен устранить первую ошибку компилятора. Что касается второй ошибки, мы должны завершить асинхронные тесты стиля в выражениях утверждения или сопоставления:

... второй тест будет неявно преобразован в Future[Assertion] и зарегистрирован. Неявное преобразование из Assertion в Future[Assertion], , поэтому вы должны завершить синхронные тесты в каком-то ScalaTest выражение утверждения или сопоставления . Если тест не закончится иначе введите Assertion, вы можете поместить succeed в конце теста.

Таким образом, запись succeed в конце тела теста будет временно удовлетворять проверку типов, пока мы не напишем фактические проверки:

scenario("Send data to a server when Kafka is UP") {
  ...
  succeed // FIXME: add proper checks
}
...