Макет Documentum IDfSession с использованием Mockito

У меня есть следующая (упрощенная) функция, которую я хочу проверить с помощью JUnit:

protected IDfCollection getCollection(IDfSession session) throws DfException{
  IDfQuery dfcQuery = new DfQuery();
  dfcQuery.setDQL(MY_DQL);
  return dfcQuery.execute(session, IDfQuery.READ_QUERY);
}

Я успешно протестировал его с использованием реального IDfSession, но я хотел бы сделать это без подключения к репозиторию. Итак, я попытался издеваться над пустым IDfSession, используя:

IDfSession mockedSession = Mockito.mock(IDfSession.class);

Но мне дали NullPointerException:

Caused by: java.lang.NullPointerException
at java.util.StringTokenizer.<init>(StringTokenizer.java:182)
at java.util.StringTokenizer.<init>(StringTokenizer.java:204)
at com.documentum.fc.internal.util.SoftwareVersion.<init>(SoftwareVersion.java:53)
at com.documentum.fc.client.DfQuery.runQuery(DfQuery.java:136)
at com.documentum.fc.client.DfQuery.execute(DfQuery.java:208)

Не зная, что на самом деле пошло не так (какая функция фиктивного объекта вернула значение null, чего не ожидалось), я создал простой класс, реализующий интерфейс IDfSession, и использовал инструмент покрытия кода, чтобы проверить, какая функция была вызвана. Позже я надеялся поиздеваться над поведением функции, используя mockito. Я казался getServerVersion, поэтому я изменил возвращаемое значение null на реальное значение "6.5.0.355 SP3P0600 Linux.Oracle". Следующей вызываемой функцией была getBatchManager, поэтому здесь я также издевался над возвращаемым объектом. Но теперь я получаю:

Caused by: java.lang.ClassCastException: com.example.model.mock.IDfSessionMocked cannot be cast to com.documentum.fc.client.impl.session.ISession

Я попытался реализовать интерфейс ISession в классе IDfSessionMocked, но он не компилируется, например, потому что один из используемых типов (а именно com.documentum.fc.client.impl.session.ISessionListener) не виден.

Здесь: http://www.informedconsulting.nl/blog/?p=187 Я нашел информацию, как это сделать с помощью powerMock. Еще одно отличие состоит в том, что объект берется напрямую из сеанса без использования IDfQuery.

Что я должен делать?

Обновление после комментария

Функция getBatchManager была смоделирована, и теперь она возвращает анонимный объект внутреннего класса со всеми возвращаемыми значениями, равными false или 0, в зависимости от ожидаемого возвращаемого типа. Функция isFlushBatchOnQuery была вызвана в соответствии с инструментом покрытия.


person Michał Cegielski    schedule 20.08.2014    source источник
comment
У вас есть исключение для объекта ISession to IDfSession, пытающегося получить издевательский объект для метода getBatchManager? У меня не так много опыта работы с фреймворками для фиктивных объектов, но я предполагаю, что вы допустили ошибку новичка. Не могли бы вы предоставить более подробную информацию?   -  person Miki    schedule 20.08.2014
comment
Я предполагаю, что это не проблема объекта, возвращаемого getBatchManager, но более вероятно, что мой издевательский класс, который реализует интерфейс IDfSession, должен также реализовывать ISession, чего он не может.   -  person Michał Cegielski    schedule 21.08.2014


Ответы (1)


Я не эксперт по Documentum, но думаю, вам нужен более сложный объект, вы можете посмотреть этот репозиторий https://github.com/ValentinBragaru/dfc-mock

IDfSessionMock - это то, что вам нужно, я думаю.

Я надеюсь, что это помогает.

person felix at housecat    schedule 26.08.2014