2009-02-13 79 views
2

我無法設置Spring.Net的配置,因此我可以使用Rhino Mocks生成一個模擬對象。我意識到GenerateMock是一個靜態方法,所以我需要在配置中使用工廠方法,但我無法使它工作。這是我使用的配置:爲靜態生成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

實際上,您只能在泛型參數中指定類型名稱而不是程序集名稱。它應該更好閱讀

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

請注意方括號引用全限定類型名,並且您需要獲取最近的每晚構建。

全限定名稱允許CLR找到包含您類型的程序集。否則,Spring將掃描已經加載的該類型名稱的程序集。如果您的程序集尚未加載,則會遇到您遇到的錯誤消息。

+0

謝謝你。我也意識到,我遺漏了使其失敗的singleton =「false」屬性。再次感謝,困惑。 – Confused 2009-02-16 15:32:57

1

不確定你使用的是哪個版本的rhino mock,但這似乎不再適用,因爲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> 

我基本上明確地傳遞對象的空數組,這樣春天會識別方法簽名...

+0

謝謝!我希望我早點讀過第一個迴應。這也是我的問題。 – Dio 2012-06-01 15:50:49