Как написать внутренний метод mockable - PullRequest
4 голосов
/ 25 июня 2010

Мы используем Moq в качестве нашей среды для имитации, проблема в том, что тип, который должен быть смоделирован, делается с использованием интерфейса, проблема в том, что что-то в этом интерфейсе будет общедоступным и, следовательно, считается частью нашего публичного API.

есть ли способ иметь надруганного и не публичного члена?

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

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

Хорошо, один из вариантов заключается в том, что вы можете реализовать интерфейс internal и использовать [assembly:InternalsVisibleToAttribute], чтобы сделать внутренние типы доступными для ваших модульных тестов.

[assembly:InternalsVisibleTo("MyUnitTestAssembly")]

internal interface ISomeInterfaceForMocking { ... }

public class MyMockableType : ISomeInterfaceForMocking { ... }
0 голосов
/ 25 июня 2010

Является ли http://code.google.com/p/moq/wiki/QuickStart#miscellaneous (см. Раздел Разное) каким-либо использованием (т. Е. Синтаксис для насмешки protected материал)?

Интернет-провайдер говорит, что не должно быть волшебных вещей в интерфейсе, который интересует только некоторых людей. Кроме того, вы рассматривали возможность использования одного virtual метода, а не всего интерфейса и / или базового интерфейса для бита, который можно использовать? ? Или просто есть специальный интерфейс для этого. Помните, что если вам трудно издеваться или тестировать, то в вашем коде обычно есть что-то, что можно улучшить (в отличие от поиска технических приемов для прыжков и / или использования чрезмерно мощных фреймворков).

Кроме того, держу пари, что если вы опубликуете уменьшенную версию своего теста, кто-то сможет провести ее рефакторинг, и мы все кое-что узнаем.

...