Как я могу издеваться над внутренним интерфейсом, используя NMock2?

Если я попробую это, я просто получу исключение:

System.TypeLoadException : Access is denied: 'Namespace.IInternalInterface'.

Обнародование интерфейса не является приемлемым решением. Я не хочу менять видимость моего API, чтобы протестировать его.

2 ответа

Решение

Я нашел ответ на это:

NMock2, (и другие насмешливые фреймворки). Создает фиктивные объекты в динамически генерируемых сборках. Для того, чтобы макетная среда создавала фиктивный объект, внутренние компоненты должны быть видны этим сборкам.

Просто добавьте следующие объявления в класс AssemblyInfo.cs для тестируемого модуля:

// Allow unit test and mock assemblies to see internal members.
[assembly: InternalsVisibleTo("MyAssembly.UnitTest")]
[assembly: InternalsVisibleTo("NMock2")]
[assembly: InternalsVisibleTo("Mocks")]
[assembly: InternalsVisibleTo("MockObjects")]

Нашел и задокументировал решение.

http://www.rhyous.com/2012/05/03/nmock2-internal-interface/

Оказывается, что более новая версия NMock2 (я получил ее здесь: NMock2 Project) нужна только одна, и она другая.

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Другие вопросы по тегам