Проверка типа класса фиктивного объекта - PullRequest
9 голосов
/ 07 июня 2011

В настоящее время я тестирую метод, который получает объект и проверяет, является ли этот объект экземпляром класса, который хранится как переменная экземпляра. Пока проблем нет.

Но в тесте я должен использовать макеты, и один из этих макетов - это объект, который передается этому методу. И теперь, это становится хитрым. Давайте посмотрим код (я суммировал код в этом тесте):

    Class<AdapterEvent> clazz = AdapterEvent.class;
    AdapterEvent adapterEvent = Mockito.mock(AdapterEvent.class);

    Assert.assertTrue(adapterEvent.getClass().equals(clazz));
    Assert.assertTrue(adapterEvent.getClass().isAssignableFrom(clazz));

Ну, этот тест на самом деле не проходит. Кто-нибудь знает почему? У кого-нибудь есть идея, как я мог бы решить эту проблему, продолжая использовать макет, как в тесте? Может быть, есть другой способ сравнения объектов с определенным классом.

Большое спасибо за помощь.

С наилучшими пожеланиями

Херардо

Ответы [ 5 ]

8 голосов
/ 28 сентября 2011

Ваше первое утверждение никогда не будет правдой - макеты Mockito - это совершенно новый класс, поэтому простой equals() никогда не сработает. Кстати, для таких тестов вы получите гораздо более полезное сообщение об ошибке, если вы используете Assert.assertEquals(), где первый аргумент - ожидаемый результат; e.g.:

Assert.assertEquals(clazz, adapterEvent.getClass()); 

Ваше второе утверждение будет правильным, но вы перепутали направление isAssignableFrom() (это легко сделать, JavaDoc сильно сбивает с толку) - переверните его, и вы получите золото:

Assert.assertTrue(clazz.isAssignableFrom(adapterEvent.getClass()));
2 голосов
/ 23 июня 2016

В Mockito 2.0.0 появился новый метод getMockedType , который возвращает класс, первоначально переданный в Mockito.mock(Class). Я бы рекомендовал использовать этот метод, потому что метод getSuperClass() работает не во всех случаях.

MockingDetails mockingDetails = Mockito.mockingDetails(mockObj);
Class<?> cls = mockingDetails.getMockedType();
2 голосов
/ 07 июня 2011

Я думаю, что instanceof будет работать так, как вы хотите:

Assert.assertTrue(adapterEvent instanceof AdapterEvent);

Вы уверены, что вам даже стоит проверить это? Трудно сказать, не зная, чего вы пытаетесь достичь, но я думаю, что этот тест может и не понадобиться.

1 голос
/ 24 ноября 2017

Чтобы проверить, что объект возвратил экземпляр класса в C #, который вы ожидаете, выполните следующее:

Assert.IsInstanceOfType(adapterEvent, typeof(AdapterEvent));
0 голосов
/ 14 февраля 2013

Класс Mocked является подклассом вашего исходного класса, поэтому просто проверьте суперкласс, например:

Assert.assertTrue (adapterEvent.getClass (). GetSuperclass (). Equals (clazz));

...