2009-06-18 6 views
4

Итак, у меня есть куча внутренних классов, которые я пытаюсь высмеять с RhinoMocks. Я добавил следующую строку в AssemblyInfo.cs:Отказывание внутренних классов с RhinoMocks

[assembly:InternalsVisibleTo(RhinoMocks.StrongName)] 

Однако это еще не позволяет мне издеваться внутренние классы; Я получаю следующее сообщение об ошибке от NUnit:

MyTests.SomeTest: System.TypeLoadException: Метод 'SomeMethod' от типа 'SomeType504cf40be6b444abfd417dccf5d6752' из сборки «DynamicProxyGenAssembly2, Version = 0.0.0.0, Culture = нейтрально, PublicKeyToken = null 'переопределяет метод , который не виден из этого сборка.

Обратите внимание, что я использую «объединенную» версию RhinoMocks (а не вариант загрузки «с сборками замков»). Я не знаю, как Замок был объединен с RhinoMocks, но не должен делать мои внутренние элементы видимыми для RhinoMocks, аналогично сделать его видимым для Castle (который является частью Rhino.Mocks.dll)?

ответ

10

И вот я, наконец, получил какое-то время и работал, что все, что мне нужно было сделать, чтобы добавить следующее AssemblyInfo.cs:

+0

+1. У меня была такая же ошибка с Moq. Их wiki показывает 'InternalsVisibleTo()', содержащий токен PublicKey. Удаление обработанного токена. –

2

Ваша проблема заключается в том, что RhinoMocks динамически генерирует сборку с динамическими прокси. Таким образом, ваши внутренние видимости для RhinoMocks не помогают. Единственное возможное решение вашей проблемы, я вижу:

  1. Сделайте классы, которые вы хотите издеваться публично.
  2. Напишите мастер-класс для сборки тестовых проектов и измените атрибут InternalVisibleTo, чтобы предоставить доступ к тестовой сборке.
+0

это не так, как носорог использует замок динамический прокси для создания прокси, вам просто нужно сделать внутренности видимыми для сборки замка, как указано в другом ответе –