環境による改行コード
Junitでテストを書いていたら、どうしても文字列が一致しないのケースがあって少し調べて見たら、どうやら改行コードの指定の仕方に問題があったみたい。
テストケースは以下のような感じ。
@Test public void test() { // ファイルとかから文字列を取得 String result = getData(); // 実行結果を比較 assertThat(result, is("1行目\n2行目\n3行目")); }
ただ、これだと下記のようなエラーを吐いて終わってしまう。
java.lang.AssertionError:
Expected: is "1行目\n2行目\n3行目"
got: "1行目\r\n2行目\r\n3行目"
実は改行コードはOSに依存するので、UNIX系なら「\n」Windowsなら「\r\n」といった感じで環境によって改行コードを変えないといけない。
なんで、環境の改行コードを取得する「 System.getProperty("line.separator")」を使って上記のコードを修正すると、ローカルでもなんでも問題なく実行できることになる。
private static final String LINE_SEPARATOR = System.getProperty("line.separator"); @Test public void test() { // ファイルとかから文字列を取得 String result = getData(); // 実行結果を比較 assertThat(result, is("1行目" + LINE_SEPARATOR + "2行目" + LINE_SEPARATOR + "3行目")); }
こんな感じで基本的には改行コードがベタ書きをやめた方がいいみたい。