技術開発日記

技術やら日々思ったことを綴ってます。

環境による改行コード

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行目"));
}

こんな感じで基本的には改行コードがベタ書きをやめた方がいいみたい。