2017-02-20 1 views
-1

ich einen Komponententest geschrieben haben, die, wenn es steuert alle Codierung Probleme mit Deutsch Buchstaben (ä, ö, ß, etc.)zwei Strings funktioniert auf Windows Vergleicht man aber nicht auf 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("ÄÖÜäöüß"))); 
} 

Dieser Test läuft in Windows pc aber scheitert an jenkins, die eine Linux-Umgebung ist. Die Fehlermeldung lautet wie folgt;

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

Meine Frage ist, ist es falsch, mailText mit "ÄÖÜäöüß" zu vergleichen? Ich glaube, ich muss keine Codierung angeben, wenn ich zwei Strings vergleiche.

+2

'Charset.defaultCharset()' klingt verdächtig. Können Sie UTF-8 auswählen? – Ryan

+0

Standard-Zeichensatz wird wahrscheinlich zwischen Unix und Windows unterscheiden, würde ich erwarten, dass Windows zu sein "ISO-1250 (Windows)" aber ich würde nicht wirklich wissen, welche unter Unix zu erwarten ... können Sie mit UTF-8 versuchen? – Shark

+0

Der Standard-Zeichensatz ist in Ihren beiden Umgebungen möglicherweise nicht identisch, daher die unterschiedlichen Ergebnisse. –

Antwort

0

Ich habe die Assertion Zeile wie folgt geändert und es hat funktioniert.

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

Könnte es sein, dass Ihre Dateicodierung und andere Dinge unter Windows anders als auf Linux definiert sind? Es klingt wie ein Unterschied in der Dateicodierung.

Sie explizite Satzcodierung in den .bashrc oder mit dem locale -Programms in Linux (zB UTF-8) können versuchen:

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

Was ist die Ausgabe von:

locale ?

Irgendein anderes als das erwartete?

Überprüfen Sie auch, welche Zeichensatz die defaultCharset() verwendet. Versuchen Sie, den Wert unter Windows/Linux auszugeben.

Verwandte Themen