Scala Функциональные тесты: как сделать отрицательное утверждение? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть несколько расслабляющих сервисов, использующих Scala и игровой фреймворк (2.4. *), И я пытаюсь написать несколько функциональных тестов для этих сервисов и испытываю трудности с отрицательными утверждениями. Например:

Если я получу ответ (в Json) от моего сервиса, например:

{ "id":71324, "name":"Matt", "address":"24 Main st" }

Я пытаюсь проверить, что:

  • поле "адрес" существует и не является пустым
  • Там не существует ни одной клавиши с именем "phone"

С трудом находил пример того, как сделать вышеупомянутое утверждение.

Для других утверждений я сделал это так:

class IntegrationTest extends PlaySpec with OneServerPerSuite with MockitoSugar { // need with mockito*?

  override lazy val app = new GuiceApplicationBuilder()
    .configure(Configuration.apply(ConfigFactory.parseFile(new File("test/resources/testApplication.conf")).resolve()))
    .overrides(bind[EmployeeDAO].to[MockEmployeeDAO])
    .build
  implicit lazy val log = LoggerFactory.getLogger(getClass)

  val wsClient = app.injector.instanceOf[WSClient]
  val myPublicAddress =  s"localhost:$port"


  "test1" must {
    "get employee record" in {
      val route = s"http://$myPublicAddress/INTERNAL/employee/7"
      val response = await(wsClient.url(route).get())
      log.debug(response.header("Content-Type") + " -> " + response.body)
      val jsonResponse = Json.parse(response.body)

      response.status mustBe OK

      (jsonResponse \ "id").get mustBe JsNumber(71324)
      (jsonResponse \ "name").get mustBe JsString("Matt")

      //trying to check that there is no phone

      //trying to check address fiels exists and is non-empty
      //(jsonResponse \ "address").get mustNot empty -- got systax error


    }

  }
}

Могу ли я получить помощь здесь?

1 Ответ

1 голос
/ 21 апреля 2020

Есть немного проблем с

(jsonResponse \ "address").get mustNot empty

Тип (jsonResponse \ "address") равен JsLookupResult, который имеет метод isEmpty(), следовательно, проверка на пустоту кажется разумным попробовать

(jsonResponse \ "address") mustNot be (empty)

Однако это не работает, поскольку ключевое слово DSL empty работает со следующими типами

  • scala.collection.GenTraversable
  • String
  • Array
  • scala.Option
  • java.util.Collection
  • java.util.Map
  • произвольный объект с isEmpty() метод, который возвращает Boolean
  • произвольный объект с parameterless isEmpty метод, который возвращает Boolean

, где " произвольный объект " они действительно означают произвольный ссылка объект AnyRef

implicit def emptinessOfAnyRefWithIsEmptyMethod[T <: AnyRef { def isEmpty(): Boolean}]: Emptiness[T]

и JsLookupResult является не подтипом AnyRef

sealed trait JsLookupResult extends Any with JsReadable

Следовательно, поскольку ограничение T <: AnyRef { def isEmpty(): Boolean} не выполнено, мы не можем использовать DSL с хорошей пустотой.

В качестве альтернативы должно работать следующее

(jsonResponse \ "address").isEmpty mustBe false
(jsonResponse \ "address").isDefined mustBe true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...