Насмешка над расширением метода на интерфейсе - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь смоделировать некоторый код, который вызывает метод расширения.Это устаревший код, который написан не для тестирования, но мне было поручено создать для него модульные тесты без необходимости изменения кода, поскольку время / политика / и т. Д. Теперь это позволяет.

В любом случае, код, который я пытаюсь смоделировать, находится в нашей структуре доступа к данным приложений.Мы используем (очень старую) версию NHibernate (следовательно, устаревшую).У нас есть метод, который использует nHibernate для возврата интерфейса IQueryable, который мы можем запросить.Это выглядит так:

    public static IQueryable<TEntity> Linq()
    {
        ISession session = GetCurrentUnitOfWork();

        return session.Query<TEntity>();
    }

Я могу успешно настроить метод GetCurrentUnitOfWork, чтобы он возвращал ложную сессию IS, которая вместо перехода в БД возвращает списки объектов.

Проблема в том, что метод Query не определен в ISession.Это метод расширения ISession.Так как код инфраструктуры скомпилирован для вызова метода расширения Query (), даже если я определю точно такой же метод в моей смоделированной сессии, метод расширения по-прежнему вызывается.

Итак, есть ли у кого-нибудь идеи о том, как я могу настроить этот код для вызова смоделированной версии метода Query ()?

Заранее спасибо.

1 Ответ

1 голос
/ 01 апреля 2019

Я бы предложил использовать рефлексию, чтобы посмотреть, какие методы вызывает расширение Query <> для объекта ISession, а затем смоделировать эти методы в ISession и оставить расширение Query в покое.

...