hamcrestでClass型のインスタンスをマッチする

hamcrestで何度かひっかかったので、覚え書く。

@Test
public void can_load_string_class() {
    Class< ? > klass = Reflection.loadClass( "java.lang.String" );
    assertThat( klass , is( String.class ) );
}
// テスト失敗:
// Expected: is an instance of java.lang.String
//      got: <class java.lang.String>

うまくいかないのは、isがClass型の引数に対してオーバーロードされていて、「そのクラスのインスタンスかどうか」を判定するからだ。代わりにequalToかsameInstanceを使えばよい。

@Test
public void can_load_string_class() {
    Class< ? > klass = Reflection.loadClass( "java.lang.String" );
    assertThat( klass , equalTo( (Class) String.class ) );
}