我想知道为什么会失败:
assertEquals(Key.class, expectedKey.getClass());
这不会:
assertTrue(expectedKey instanceof Key);
两者之间有真正的区别吗?
因为expectedKey
很可能是Key子类的一个实例。从失败的断言中收到的错误消息应该会告诉您。阅读它。
例如,"s"
是java.lang.Object的一个实例,但它的类不是java.lang.Object,而是java.lang.String。
因为expectedKey.getClass()
给出了运行时类型的expectedKey
Class
对象,这可能与类Key
不同。
但是,对于instanceof
,即使运行时类型expectedKey
Key
类的某个子类,结果也会true
,因为子类的实例也是超类instanceof
。
expectedKey
是Key
类的子类,如我所见
assertTrue(expectedKey instanceof Key)
返回 true,因为 expectKey 的类是 Key 类的子类
Object.getClass
在运行时返回该对象的完整类名,因此expectedKey.getClass
输出 -> ExpectedClass
和 Key.getClass
输出Key class itself
和 assertEquals
寻找比较成为在您的情况下如下 assertEquals(Key,ExpectedKey)
,两者都不同
因此它返回假
在处理null
方面也有区别。assertEquals
抛出NullPointerExeption
,而assertTrue
只是失败。