2017-02-20 6 views
-1

に失敗した2つの文字列を比較する(ß、ö、ä、など。)Windows上で動作しますが、私はドイツ語の文字と任意のエンコーディングの問題がある場合、制御ユニットテスト、書かれているLinuxの

@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にはパスしますが、Linux環境であるJenkinsでは失敗します。エラーメッセージは次のとおりです。

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

私の質問は、「ÄÖÜäöüß」とmailTextを比較するのは間違っていますか?私は2つの文字列を比較するときにエンコーディングを記述する必要はありません。

+2

'Charset.defaultCharset()'は疑わしいと思います。 UTF-8を選択できますか? – Ryan

+0

デフォルトの文字セットはおそらくUNIXとWindowsの間で違いますが、私はWindowsが 'ISO-1250(Windows)'であると期待していますが、UNIX上で期待するものは本当にわかりません... UTF-8で試すことはできますか? – Shark

+0

デフォルトの文字セットは2つの環境で同じではない可能性があります。 –

答えて

0

以下のようにアサーションラインを変更しました。

assertThat(mailText, is(equalTo(new String("ÄÖÜäöüß".getBytes(defaultCharset))))); 
0

あなたのファイルのエンコーディングとものは、WindowsではLinuxで別に定義されているかもしれませんか?それは、ファイルエンコーディングの違いのようですね。

あなたは.bashrcの中やLinux(UTF-8での例)でlocale -programを使用して明示的なセットのエンコードしようとするかもしれない:

locale:の出力である

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

何?

予想外のものはありますか?

defaultCharset()が使用している文字セットも確認​​してください。 Windows/Linuxの両方で値を出力してみてください。

関連する問題