我想知道为什么会失败:
assertEquals(Key.class, expectedKey.getClass());
而这不是:
assertTrue(expectedKey instanceof Key);
两者之间是否存在真正的差异?
答案 0 :(得分:7)
因为expectedKey
是Key的子类的实例,所以很可能。您从失败的断言中获得的错误消息应告诉您。阅读它。
"s"
,例如java.lang.Object的一个实例,但它的类不是java.lang.Object,它是java.lang.String。
答案 1 :(得分:5)
因为expectedKey.getClass()
为Class
提供expectedKey
运行时类型的对象,可能与Key
类不同。
但是,对于instanceof
,即使expectedKey
运行时类型是Key
类的某个子类,结果也将是true
,因为子类的实例也是一个instanceof
超类。
答案 2 :(得分:2)
expectedKey
是Key
类的子类,我可以看到
assertTrue(expectedKey instanceof Key)
返回true,因为expectedKey的类是Key类的子类
Object.getClass
在运行时返回该对象的完整类名,因此expectedKey.getClass
输出 - > ExpectedClass
和Key.getClass
输出Key class itself
和
assertEquals
查找比较在您的情况下如下所示
assertEquals(Key,ExpectedKey)
并且两者都不同
因此它返回false
答案 3 :(得分:0)
处理null
也有区别。 assertEquals
会引发NullPointerExeption
,而assertTrue
则会失败。