2

我无法设置 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'..

任何想法为什么我可能会收到错误?

4

2 回答 2

2

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

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

注意方括号引用完整的限定类型名,您需要获取最近的夜间构建。

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

于 2009-02-14T19:17:33.733 回答
1

不确定您使用的是哪个版本的 rhino 模拟,但这似乎不再起作用,因为 Spring.NET 没有正确解释 GenerateMock( params ...) 中的参数变量 nr。

我花了半天时间才弄清楚这一点并使用以下解决方法:

<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 能够识别方法签名......

于 2011-01-05T13:04:21.183 回答