この数値より小さいことをテストする

パフォーマンス調査用のテストケースで if (timeDiff > 200) fail(); のように書かれていたのを assertTrue(timeDiff <= 200); と書き直してみたんだけれど、失敗した時に失敗したことしかわからず、どのくらい時間がかかったのかがわからない。
どうせならテストの結果で expected:<...> but was:<...> と表示されるようにしたいなあ…ってんでつくってみました。

class LessThanEqualTo {
  private final long value;

  LessThanEqualTo(long value) {
    this.value = value;
  }

  @Override
  public String toString() {
    return "\"" + value + " >= \"";
  }

  @Override
  public boolean equals(Object object) {
    return value >= ((Number)object).longValue();
  }
}

これを使ってこんな感じのテストケースを書く。:

  void testHoge() {
    ...
    assertEquals(new LessThanEqualTo(100), result);
  }

このテストに失敗すると次のようなトレースが得られる。:

junit.framework.AssertionFailedError: expected:<"100 >="> but was:<132>
...

うん、わかりやすくなった。

(これもきっと車輪の再発明だよね?)