在Play framework 2.x中测试Json转换器

在Play framework 2.x中测试Json转换器,json,unit-testing,testing,playframework-2.0,transform,Json,Unit Testing,Testing,Playframework 2.0,Transform,我编写了三个带有验证的简单json转换器 val validateDefaultReminderMethod = Reads.pattern("email|sms|popup".r, "error.reminder.method (pattern: email|sms|popup)") val validateDefaultReminderMinutes = Reads.min(0) keepAnd Reads.max(40320) val validateDefaultReminder =

我编写了三个带有验证的简单json转换器

val validateDefaultReminderMethod = Reads.pattern("email|sms|popup".r, "error.reminder.method (pattern: email|sms|popup)")

val validateDefaultReminderMinutes = Reads.min(0) keepAnd Reads.max(40320)

val validateDefaultReminder = (
    (__ \ "method").json.pickBranch(Reads.of[JsString] keepAnd validateDefaultReminderMethod) and
      (__ \ "minutes").json.pickBranch(Reads.of[JsNumber] keepAnd validateDefaultReminderMinutes)
    ).reduce
对于前两个变压器的单元测试,我可以使用简单的测试,如

"Default Reminder Method validator" must {
    "is successful for email value" in {
      JsString("email").validate(validateDefaultReminderMethod) must be (JsSuccess("email"))
    }
    ...
}
但我不明白,我必须如何测试第三台变压器。它由前两个组成,但我如何检查它?所以我必须为第三台变压器编写相同的测试?

关于:

case class MyClass(method: String, minutes:Int)

"validateDefaultReminder" must {
    "is successful for email value and minutes" in {
        val json = Json.parse("""{ "email: "a@gmail.com", "minutes": 45}""")              
        json.validate[MyClass](validateDefaultReminder) must be JsSuccess
    }
    ...
}

如果
validatedefaultrementer
将被更改(例如,方法模式将被删除),测试将成功,但必须失败。所以我也必须为复杂的变压器做同样的测试。它会通过的,因为你删除了验证。这就是代码实际运行的方式,所以我不确定这里的问题是什么?如果代码被更改,您希望测试失败吗?而不是当逻辑被打破的时候?如果是这样的话,你需要测试转换器定义,而不是转换器逻辑。我无法理解如何测试,因为如果我测试了类,并且我在另一个类中有这个类的值,我确定第二个类将如何工作。但对于变形金刚,我不知道他收集了什么。