【问题标题】:Grails 4.0.1 - Spock unit test cases fail because of spacesGrails 4.0.1 - Spock 单元测试用例因空格而失败
【发布时间】:2020-01-28 10:04:41
【问题描述】:

我正在我的 Grails 4.0.1 应用程序中使用单元测试来测试 i18n 格式,但看到了奇怪的结果。 对我来说,应该满足这个规格条件,但事实并非如此。

我想没有人有过可以解释的类似经历,或者这只是一个错误? 任何帮助将不胜感激。

【问题讨论】:

  • 从截图中看不出字符串中实际有哪些空白字符。您将需要询问这些字符串以识别差异。
  • 只是给你和可能的Unicode whitespace characters的想法......但这也可能是客户端和服务器上不同字符编码的问题。
  • "但也可能是客户端和服务器上字符编码不同的问题。" - 我认为这可能与这里无关。它看起来像一个单元测试调用对象的方法,而不是 HTTP 请求。
  • formatService.formatCurrency(123456.78).bytes == '123 456,78 $'.bytes 之类的东西替换你当前的断言可能会对具体问题有所了解。
  • 你是对的@JeffScottBrown。从那以后,我通过一些很好的建议找出了问题,以获取每一侧的十六进制值。回答跟随。

标签: grails internationalization spock


【解决方案1】:

只是一个想法:

您能否遍历预期值和实际值并将字符一一转换为 ascii,以便您可能会看到差异

for( c in ​'123 456,78 $') {  
  println "$c   ${(int)c}"
}

【讨论】:

  • 另外,println '123 456,78 $'.bytes 也是一种选择。
【解决方案2】:

建议我获取每一边的十六进制值,之后很明显格式化程序使用的是不间断行空间c2a0,而我的“预期”值使用的是标准类型20

我已经通过在“预期”一侧使用不间断空格来解决这个问题,这可以在 Mac 上通过按住 Alt + space 按钮来实现,如下所示。

【讨论】:

  • 你的 IDE 中的类有错误字符编码的味道
  • 我不太确定。除非我特别打算这样做,否则我不希望 IDE 使用不间断的空间。可能是我误会了。
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
相关资源
最近更新 更多