変態Comparatorを書いてユニットテストをしてみた
変態アドベントカレンダーが止まってしまいそうなので支援します。
最近、勤務先の会社で、アルバイト希望の学生に試験を出したりしているのですが、Comparatorが書ける子いないので、(ある意味)模範例のつもりで颯爽と書いてみたいと思います。(いえーい!みんな見てるー?w)
どんなときでも"hentai"または"HENTAI"が先頭に来るコンパレーターです。
import java.util.Comparator; public class HentaiComparator implements Comparator<String> { public int compare(String o1, String o2) { if ("hentai".equalsIgnoreCase(o1)) { if ("hentai".equalsIgnoreCase(o2)) { return o1.compareTo(o2); } return -1; } else if ("hentai".equalsIgnoreCase(o2)) { return 1; } if (o1 == null) { if (o2 == null) { return 0; } return 1; } if (o2 == null) { return -1; } return o1.compareTo(o2); }; }
ついでにユニットテストも書いてみましょう。
import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.Iterator; import java.util.TreeSet; import org.junit.Test; public class HentaiCompareTest { @Test public void 並び順テスト() { TreeSet<String> hentaiSet = new TreeSet<String>(new HentaiComparator()); hentaiSet.add("susumuis"); hentaiSet.add("hoge"); hentaiSet.add("HENTAI"); hentaiSet.add("fuga"); hentaiSet.add(null); hentaiSet.add("hentai"); Iterator<String> iter = hentaiSet.iterator(); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("HENTAI")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("hentai")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("fuga")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("hoge")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("susumuis")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), nullValue()); assertThat(iter.hasNext(), is(false)); } }
JUnit4でassertThat使ったの初めてだったなんて内緒だ。
注意:このコードを参考にして弊社の試験を落ちても何の保証もできません。