assertTrue with" instanceof" vs assertEquals

时间:2014-04-25 08:13:41

标签: java junit

我想知道为什么会失败:

assertEquals(Key.class, expectedKey.getClass());

而这不是:

assertTrue(expectedKey instanceof Key);

两者之间是否存在真正的差异?

4 个答案:

答案 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)

expectedKeyKey类的子类,我可以看到

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

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

因此它返回false

答案 3 :(得分:0)

处理null也有区别。 assertEquals会引发NullPointerExeption,而assertTrue则会失败。