Настройка конфигурации для Spring.Net и Rhino Mocks для статического GenerateMock <> - PullRequest
2 голосов
/ 13 февраля 2009

У меня проблемы с настройкой конфигурации Spring.Net, чтобы я мог использовать Rhino Mocks для создания фиктивного объекта. Я понимаю, что GenerateMock является статическим методом, и поэтому мне нужно использовать фабричный метод в конфигурации, но я просто не могу заставить его работать. Это конфигурация, которую я использую:

<object id="exampleObject"
        type="Rhino.Mocks.MockRepository, Rhino.Mocks"
factory-method="GenerateMock&amp;lt;MyAssembly.MyInterface>" />

Тогда в моем коде (который является модульным тестом) я использую:

using (IApplicationContext ctx = ContextRegistry.GetContext()) {....}

но я получаю следующее сообщение об ошибке:

System.Configuration.ConfigurationErrorsException: Error creating context 'spring.root': Could not load type from string value 'MyAssembly.MyInterface'. --->  System.TypeLoadException: Could not load type from string value 'MyAssembly.MyInterface'..

Есть идеи, почему я могу получить ошибку?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2009

На самом деле вы указываете только имя типа, но не имя сборки в аргументе generics. Лучше читать

  factory-method="GenerateMock<[MyNamespace.MyInterface, MyAssembly]>"

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

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

1 голос
/ 05 января 2011

Не уверен, какую версию насмешек с носорогом вы использовали, но, похоже, это больше не работает, потому что Spring.NET неправильно интерпретирует переменную nr аргументов в GenerateMock ( params ...) .

Мне потребовалось полдня, чтобы понять это и использовать следующий обходной путь:

<object id="Logger" type="Rhino.Mocks.MockRepository, Rhino.Mocks"
            factory-method="GenerateMock&lt;Core.Common.Logging.ILog>" >
      <constructor-arg name="argumentsForConstructor">
            <list element-type="System.Object">             
            </list>
        </constructor-arg>
</object>

Мне пришлось явно передать пустой массив объектов, чтобы Spring распознал сигнатуру метода ...

...