为静态GenerateMock<>设置Spring.Net和Rhino Mocks的配置

时间:2009-02-13 16:05:23

标签: c# rhino-mocks spring.net

我无法设置Spring.Net的配置,因此我可以使用Rhino Mocks生成模拟对象。我意识到GenerateMock是一个静态方法,因此我需要在配置中使用factory-method,但我无法让它工作。这是我正在使用的配置:

<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 个答案:

答案 0 :(得分:2)

实际上,您只在generics参数中指定typename而不指定程序集名称。它应该更好地阅读

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

注意方括号引用完整的限定类型名称,你需要抓住最近的每晚构建。

完整限定名称允许CLR找到包含您的类型的程序集。否则,Spring会扫描已加载的该类型名称的程序集。如果您的程序集尚未加载,则会遇到您所面临的错误消息。

答案 1 :(得分:1)

不确定您使用的是哪个版本的rhino mocks但是这似乎不再起作用,因为Spring.NET没有正确解释GenerateMock中的变量nr( 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能够识别方法签名......