Интересно, почему это не удается:assertTrue с "InstanceOf" против assertEquals
assertEquals(Key.class, expectedKey.getClass());
и это не делает:
assertTrue(expectedKey instanceof Key);
Есть ли реальная разница между этими двумя?
Интересно, почему это не удается:assertTrue с "InstanceOf" против assertEquals
assertEquals(Key.class, expectedKey.getClass());
и это не делает:
assertTrue(expectedKey instanceof Key);
Есть ли реальная разница между этими двумя?
Поскольку expectedKey
является примером подкласса ключа, скорее всего. Сообщение об ошибке, которое вы получаете от неудавшегося утверждения, должно сказать вам. Прочтите.
"s"
, например, является экземпляром java.lang.Object, но его класс не является java.lang.Object, это java.lang.String.
Поскольку expectedKey.getClass()
дает Class
объект типа исполнения в expectedKey
, которая может отличаться от Key
класса.
Однако, с instanceof
, даже если expectedKey
типа выполнения является некоторый подкласс Key
класса, результат будет true
, поскольку экземпляр подкласса, также instanceof
супер класс.
expectedKey
подкласс Key
класса, как я могу видеть
assertTrue(expectedKey instanceof Key)
возвращает истину, поскольку класс expectedKey является подклассом Key класса
Object.getClass
возвращает полное имя класса этого объекта во время выполнения и, следовательно, expectedKey.getClass
выходы ->ExpectedClass
и Key.getClass
выходы Key class itself
и assertEquals
ищет для сравнения, будет в вашем случае ниже assertEquals(Key,ExpectedKey)
и оба отличаются
, следовательно, он возвращает ложь
Там разница в обработке null
тоже. assertEquals
выбрасывает NullPointerExeption
, тогда как assertTrue
просто терпит неудачу.
Вы можете использовать Key.class.isInstance (expectedKey) – aalku