在Groovy、Spock和Rest Assured测试中使用三元运算符- Intergation Test

llew8vvj  于 2023-04-29  发布在  其他
关注(0)|答案(2)|浏览(102)

我有下面的代码,我想根据测试的where部分替换值:

void 'should pass some test() {
  given:
  stubFor(get(urlEqualTo("/someVal/$productOrderId"))
     .willReturn(defaultWiremockResponse()
       .withBody(""" 
          {
            "startDateTime" : ${myTime? "$myTime" : null}
          }
       """
    )
   //...... some when
   //...... some then
   where:
   productOrderId | myTime
   "1"            | "2023-04-23T07:13:15.862Z"  
   "2"            | "null" 
}

此测试适用于null,但对于像"2023-04-23T07:13:15.862Z"这样的值给出错误
嵌套异常是com。fasterxml.jackson.databind.JsonMappingException:意外字符('-'(代码45)):需要用逗号分隔对象条目
我认为不知何故"startDateTime"没有得到双引号""的值,得到如下所示

{
  "startDateTime" : 2023-04-23T07:13:15.862Z   // missing quotes around the value
}

这可能就是问题所在有人能帮助我理解这一点,并修复这个错误的字符串插值

vyu0f0g1

vyu0f0g11#

尝试使用\处理双引号

"startDateTime" : ${myTime? "\"${myTime}\"" : null}
djp7away

djp7away2#

就像我在 Shashank Vivek 的答案下的评论中所说的,你也可以这样做,完全避免嵌套的GString插值:

class MySpec extends Specification {
  def 'should pass some test'() {
    given:
    println \
      """\
      {
        "startDateTime" : ${myTime? '"' + myTime + '"' : null}
      }\
      """.stripIndent()

    expect: true
   
    where:
    productOrderId | myTime
    "1"            | "2023-04-23T07:13:15.862Z"  
    "2"            | null
  }
}

控制台日志:

{
  "startDateTime" : "2023-04-23T07:13:15.862Z"
}    
{
  "startDateTime" : null
}

Groovy Web Console中尝试。
可以随意忽略反斜杠和缩进删除。我只是为了避免不必要的缩进和换行符。

相关问题