assertTrue with "instanceof" vs assertEquals



我想知道为什么会失败:

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

expectedKeyKey类的子类,如我所见

assertTrue(expectedKey instanceof Key)返回 true,因为 expectKey 的类是 Key 类的子类

Object.getClass 在运行时返回该对象的完整类名,因此expectedKey.getClass输出 -> ExpectedClassKey.getClass 输出Key class itselfassertEquals寻找比较成为在您的情况下如下 assertEquals(Key,ExpectedKey),两者都不同

因此它返回假

在处理null方面也有区别。assertEquals抛出NullPointerExeption,而assertTrue只是失败。

最新更新