Scala 如何为Play Framework JSON阅读器编写单元测试

Scala 如何为Play Framework JSON阅读器编写单元测试,scala,playframework,Scala,Playframework,我希望为shipmentNumberValidator方法编写单元测试,其中Reads是play.api.libs.json.Reads。我该怎么做 object Validator { def shipmentNumberValidator(): Reads[String] = Reads.filter(ValidationError(ErrorConstants.BAD_SHIPMENT_NUMBER))(_.matches(BarcodePatterns.Shipm

我希望为
shipmentNumberValidator
方法编写单元测试,其中
Reads
play.api.libs.json.Reads
。我该怎么做

object Validator {
    def shipmentNumberValidator(): Reads[String] =
        Reads.filter(ValidationError(ErrorConstants.BAD_SHIPMENT_NUMBER))(_.matches(BarcodePatterns.ShipmentNumber))
}
单元测试应该向它传递一个装运编号,并且该方法要么成功返回装运编号,要么返回错误消息(如果装运编号格式不匹配)。我不知道如何将值传递给这个方法

该方法通常用于伴随对象的隐式读取,例如:

object ShipmentOrder {
    implicit val shipmentOrderReads: Reads[ShipmentOrder] = (
  (JsPath \ "id").read[String](Validator.missingFieldValidator("id") keepAnd Validator.shipmentNumberValidator())(ShipmentOrder.apply _)
}
根据您使用的标准(例如规格2),您可以按以下方式测试期望值:

  • 执行
    Json.parse(“{expectedJson}”)必须是JsResult(expectedstance)
  • 执行
    Json.parse(“{unexpectedJson}”)必须是JsError(33;)
使用specs2:

import play.api.libs.json._

"JSON" should {
  "be successfully parsed when expected" in {
    Json.parse("""{"expected":"json"}""") must beLike[JsResult[ShipmentOrder]] {
      case JsSuccess(parsed, _) =>
        parsed must_== expectedShipmentOrder
    }
  }

  "fail to be parsed if expected" in {
    Json.parse("""{"unexpected":"json"}""") must beLike[JsResult[ShipmentOrder]] {
      case JsError(details) =>
        ok // possible check `details`
    }
  }
}

嗯,有没有办法不用shipmentNumberValidator测试
shipmentNumberValidator
?原因是验证器不仅仅由ShipmentOrder使用,还有几个不同的类使用的验证器。