assertTrue与"instanceof"vs assertEquals

xyb*_*rek 6 java junit

我想知道为什么会失败:

assertEquals(Key.class, expectedKey.getClass());
Run Code Online (Sandbox Code Playgroud)

这不是:

assertTrue(expectedKey instanceof Key);
Run Code Online (Sandbox Code Playgroud)

这两者之间有真正的区别吗?

JB *_*zet 7

因为expectedKey很可能是Key 的子类的实例.您从失败的断言中获得的错误消息应告诉您.阅读.

"s"例如,是java.lang.Object的一个实例,但它的类不是java.lang.Object,它是java.lang.String.


Roh*_*ain 5

因为expectedKey.getClass()给出了Class运行时类型的对象expectedKey,它可能与Key类不同.

但是,instanceof即使expectedKey运行时类型是类的某个子Key类,结果也是true,因为子类的实例也是instanceof超类.