Junit 在法语字符串断言上失败

Posted

技术标签:

【中文标题】Junit 在法语字符串断言上失败【英文标题】:Junit fails on french string assertion 【发布时间】:2012-12-04 19:32:59 【问题描述】:

我有一个在大多数机器上运行良好的单元测试,但是一个 ubuntu 机器似乎无法比较特殊字符“?”。字符本身应该是â。在我的机器上,eclipse 控制台通常会显示我们应该使用哪种编码来确保它正常工作。

The extracted text was wrong expected:<...tons. Il jette le bl[?me sur ....

but was:<...tons. Il jette le bl[?me sur .....

测试在 Eclipse Juno 中使用 Maven 2 和 java 1.7 运行

有人有想法吗...?

编辑:

只有在通过 Maven 测试运行单元测试时才会看到这种行为,而不是在执行作为 Junit 测试运行时...在 maven 配置中,我们有

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

这是为 maven 用户设置和模块的 pom.xml 文件中设置的。

【问题讨论】:

编码?似乎文本在UTF-8 中,而其他内容是预期的。你需要改变期望。 你从哪里读取字符串?来自文件? @assylias 我从一个硬编码常量中读取 @JanDvorak 因为字符串是硬编码的,你认为我应该在哪里指定编码? @JanDvorak 看我上面的编辑 【参考方案1】:

我们设法通过@Slawomir Jaranowski 解决THIS 问题的方法解决了这个问题。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>-Dfile.encoding=$project.build.sourceEncoding</argLine>
  </configuration>
</plugin>

【讨论】:

【参考方案2】:

尝试将 UTF-8 编码为 maven-compiler-plugin&lt;build&gt; 部分的 pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.5.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
    <encoding>UTF-8</encoding>
  </configuration>
</plugin>

【讨论】:

在 unix 机器上,它在 windows 上执行,我们还必须从操作系统级别的 java 变量中设置编码才能工作。【参考方案3】:

我最近遇到了 JUnit 中的 Unicode 问题。您可以尝试在 JUnit 测试或程序本身中使用违规 Unicode 字符的转义表示法。

在您的情况下,请尝试使用 /u0032 而不是使用 â.

【讨论】:

问题是我不想重写文本,因为它只在某些特定的机器上失败。我们的构建环境运行良好。我希望在有问题的机器上找到配置更改来解决问题。 This 问题解释得很清楚,我想。我的问题是我们的构建盒升级了,新的 glibc 出现了问题,或者类似的问题。我的技术主管认为将其映射到转义的 Unicode 是最简单的解决方法。对不起,我不能给你更完整的答案。

以上是关于Junit 在法语字符串断言上失败的主要内容,如果未能解决你的问题,请参考以下文章

assert() 是啥?怎样用它?

在 JUnit 中断言正则表达式匹配

Junit ant 任务未将断言错误报告为失败

即使使用 Junit 4 框架在 selenium 中断言语句失败也继续执行 [重复]

【Python】assert断言

流式断言器AssertJ介绍