我无法设置Spring.Net的配置,因此我可以使用Rhino Mocks生成模拟对象。我意识到GenerateMock是一个静态方法,因此我需要在配置中使用factory-method,但我无法让它工作。这是我正在使用的配置:
<object id="exampleObject"
type="Rhino.Mocks.MockRepository, Rhino.Mocks"
factory-method="GenerateMock&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'..
我可能会收到错误的任何想法?
答案 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<Core.Common.Logging.ILog>" >
<constructor-arg name="argumentsForConstructor">
<list element-type="System.Object">
</list>
</constructor-arg>
</object>
我基本上必须显式传递一个空的对象数组,以便Spring能够识别方法签名......