Что .NET эквивалентен из Динамических Прокси Java?

Вот описание каждого из них, за которым следует пример из реального мира.

  • Пустышка - просто фиктивные значения для удовлетворения API.

    Пример : Если вы тестируете метод класса, который требует много обязательных параметров в конструкторе, который не оказывает влияния на ваш тест, то Вы можете создавать фиктивные объекты с целью создания новых экземпляров класса.

  • Fake - создать тестовую реализацию класса, которая может зависеть от некоторой внешней инфраструктуры. (Хорошей практикой является то, что ваш юнит-тест НЕ фактически взаимодействует с внешней инфраструктурой.)

    Пример : Создать фальшивую реализацию для доступа к базе данных, заменить ее с коллекцией in-memory.

  • Заглушка - переопределять методы для возврата жестко закодированных значений, также называемых state-based.

    Пример : Ваш тестовый класс зависит от метода Calculate(), который занимает 5 минут. Вместо того, чтобы ждать 5 минут, вы можете заменить его реальную реализацию заглушкой, которая возвращает жестко закодированные значения; занимая лишь небольшую долю времени.

  • Mock - очень похоже на Stub, но interaction-based, а не на основе состояния. Это означает, что вы не ожидаете от Mock возврата какого-либо значения, но предполагаете, что выполняется определенный порядок вызовов методов.

    Пример: вы тестируете класс регистрации пользователя. После вызова Save он должен позвонить SendConfirmationEmail.

Stubs и Mocks на самом деле являются подтипами Mock, оба меняют реальную реализацию на тестовую реализацию, но по разным, специфическим причинам.

6
задан Darren 16 July 2009 в 17:07
поделиться

5 ответов

Есть несколько библиотек, реализующих это в .NET. Вот их список с тестом.

5
ответ дан 8 December 2019 в 18:40
поделиться

Да. Вы производите от абстрактного RealProxy класса .

2
ответ дан 8 December 2019 в 18:40
поделиться

Не существует эквивалента прямого , но см. Как делать динамические прокси на C # для некоторых обходных путей:

Предпосылки: динамический прокси динамически генерирует класс в время выполнения, которое соответствует определенному интерфейс, проксируя все вызовы на единственный «общий» метод.

Ранее Стеллсми спросила, можно сделать это в .NET (это стандартная часть Java). Видя как это второй раз говорю об этом за столько дней, я считаю, это того стоит ведение блога ...

0
ответ дан 8 December 2019 в 18:40
поделиться

Наиболее широко используемым является динамический прокси Castle Project , который также используется несколькими (или, по крайней мере, 1) фреймворками для имитации. Имейте в виду, что методы (и подслащенные методы, такие как свойства) не являются виртуальными по умолчанию в dotnet, так что это может вызвать некоторые головные боли, если вы не ожидали этого в дизайне своего класса.

5
ответ дан 8 December 2019 в 18:40
поделиться

Взгляните также на PoshSharp (фреймворк AOP для .NET) - он может делать аналогичные вещи, но во время компиляции. Возможно, вы предпочтете поддерживаемый им подход.

1
ответ дан 8 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: