比较两个字符串在Windows上工作但在Linux上失败

时间:2017-02-20 12:17:57

标签: java unit-testing character-encoding

我编写了一个单元测试,用于控制德语字母(ä,ö,ß等)是否存在编码问题。

@Test
public void testBodyWithDefaultCharset() throws UnsupportedEncodingException {
    when(backendDefinition.getProperty(BackendDetailsEnum.MAIL_CHARSET.getName())).thenReturn(null);
    Charset defaultCharset  = Charset.defaultCharset();
    when(packet.getPayload()).thenReturn(defaultCharset.encode("ÄÖÜäöüß").array());

    final String mailText = classUnderTest.prepareMailText(backendDefinition, packet);

    assertThat(mailText, is(equalTo("ÄÖÜäöüß")));
}

此测试在Windows PC中传递但在jenkins上失败,这是一个Linux环境。错误消息如下;

Expected: is "ÄÖÜäöüß"
but: was "???????"

我的问题是,将mailText与“ÄÖÜäöüß”进行比较是不对的?我想,当我比较两个字符串时,我不需要说出任何编码。

2 个答案:

答案 0 :(得分:0)

您的文件编码和内容是否可以在Windows上以不同的方式在Linux上进行定义?听起来它与文件编码有所区别。

您可以尝试在.bashrc中使用显式设置编码,或者使用Linux中的locale - 程序(使用UTF-8的示例):

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

输出是什么:

locale

与预期的不同?

还要检查defaultCharset()使用的Charset。尝试在Windows / Linux上输出值。

答案 1 :(得分:0)

我已经更改了断言行,如下所示。它可以工作。

using System.Windows.Automation;

Automation.AddAutomationEventHandler(
            WindowPattern.WindowOpenedEvent,
            mainWindow.AutomationElement,
            TreeScope.Descendants,
            (sender, e) =>
            {
                var element = sender as AutomationElement;
                if (!(element.Current.LocalizedControlType == "Dialog" && element.Current.Name == "modalWindowTitle"))
                    return;

                Automation.RemoveAllEventHandlers();
                // Here run your code. The modal window was opened
            });