2014-04-25 5 views
6

Интересно, почему это не удается:assertTrue с "InstanceOf" против assertEquals

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

и это не делает:

assertTrue(expectedKey instanceof Key); 

Есть ли реальная разница между этими двумя?

+1

Вы можете использовать Key.class.isInstance (expectedKey) – aalku

ответ

7

Поскольку expectedKey является примером подкласса ключа, скорее всего. Сообщение об ошибке, которое вы получаете от неудавшегося утверждения, должно сказать вам. Прочтите.

"s", например, является экземпляром java.lang.Object, но его класс не является java.lang.Object, это java.lang.String.

5

Поскольку expectedKey.getClass() дает Class объект типа исполнения в expectedKey, которая может отличаться от Key класса.

Однако, с instanceof, даже если expectedKey типа выполнения является некоторый подкласс Key класса, результат будет true, поскольку экземпляр подкласса, также instanceof супер класс.

2

expectedKey подкласс Key класса, как я могу видеть

assertTrue(expectedKey instanceof Key) возвращает истину, поскольку класс expectedKey является подклассом Key класса

Object.getClass возвращает полное имя класса этого объекта во время выполнения и, следовательно, expectedKey.getClass выходы ->ExpectedClass и Key.getClass выходы Key class itself и assertEquals ищет для сравнения, будет в вашем случае ниже assertEquals(Key,ExpectedKey) и оба отличаются

, следовательно, он возвращает ложь

0

Там разница в обработке null тоже. assertEquals выбрасывает NullPointerExeption, тогда как assertTrue просто терпит неудачу.

Смежные вопросы