2013-02-12 64 views
2

在specs2测试中我使用JSON匹配器验证json字符串。我知道,它可以使用正则表达式来像这样是否可以将字符串匹配器与specs2 Json匹配器结合使用?

someJson must */("key")/("(one|other)".r) 

匹配值是否有可能在使用其他字符串匹配器(例如包含)一种巧妙的方法?

鉴于这种混乱的例子:

val someJson = """{"blob": "multiline string 
        |with various line endings"}""" 

这个匹配

someJson must */("blob")/contains("various") 

看起来比

someJson must */("blob")/"[^v]various.*".r 

这是不正确的表达式中使用,但它可能工作更清洁在这种情况下。

+0

有没有你想要做的事情,你不能使用正则表达式? – Eric 2013-02-12 19:22:06

+0

嗯,我想不出任何字符串匹配我不能用正则表达式做。也就是说,可读性测试对我来说很重要。我会用一个实际上与正则表达式混乱的例子来使问题更加清晰。 – iwein 2013-02-13 17:05:49

回答

6

现在可以(在specs2-1.12.4的快照和specs2-1.13.1-快照)使用specs2的匹配除了简单的字符串和正则表达式匹配的值和键:

person must /("p.*".r) */(".*on".r) /("age" -> "33") 
person must /("p.*".r) */(".*on".r) /("age" -> "\d+\.\d".r) 
person must /("p.*".r) */(".*on".r) /("age" -> startWith("3")) 
person must /("p.*".r) */(".*on".r) /("age" -> (be_>(30) ^^ ((_:String).toInt))) 
+4

改变现实为您的答案被接受,呃。很好,看起来很棒! – iwein 2013-02-15 12:13:57

2

看起来不像。该能力的信号符号是一种接受部分函数的方法,JsonMatchers上的所有方法都接受Any

+1

你是对的我认为,但不再:) – iwein 2013-02-15 12:14:39

+0

@iwein当有人发现某些东西时,情况往往是这样的Specs2不会做,让埃里克知道它... – 2013-02-15 13:19:54

+0

我不是抱怨 – iwein 2013-02-16 07:22:35