2015-12-21 41 views
0

我試圖得到一個MSTest的單元測試運行,我有我的NHibernate的配置部分下面的行App.config異常使用`NHibernate.Bytecode.DefaultProxyFactoryFactory`

<property name="proxyfactory.factory_class">NHibernate.ByteCode.DefaultProxyFactoryFactory, NHibernate</property> 

每當我試着運行單元測試,我在測試圖片的ClassInitialize方法中遇到異常。唯一的例外是:

NHibernate.Bytecode.UnableToLoadProxyFactoryFactoryException:無法 代理工廠類的配置期間加載類型 'NHibernate.ByteCode.DefaultProxyFactoryFactory, NHibernate.Bytecode'。

和我的初始化代碼:

private static ISessionFactory _sessionFactory; 
private static Configuration _configuration; 

[ClassInitialize()] 
public static void ProductRepositoryInitialize(TestContext testContext) 
{ 
    _configuration = new Configuration(); 
    _configuration.Configure(); 
    _configuration.AddAssembly(typeof(Product).Assembly); 
    _sessionFactory = _configuration.BuildSessionFactory(); 
} 

然而DefaultProxyFactoryFactory是可用的,因爲我可以在一個控制檯應用程序使用行實例化:

NHibernate.Bytecode.DefaultProxyFactoryFactory factory = new DefaultProxyFactoryFactory(); 

那麼,爲什麼NHibernate的失敗在我的單元測試類中實例化,甚至找到這種類型。它可能是測試類初始化器是靜態的嗎?

最新新聞: 如果我使用相同的代理工廠,但用流利的配置,我得到幸福和快樂,並插入到我的數據存儲行。

_factory = Fluently.Configure() 
    .Database(MsSqlConfiguration.MsSql2012) 
    .Mappings(m => m.HbmMappings.AddFromAssemblyOf<Product>()) 
    .ProxyFactoryFactory<DefaultProxyFactoryFactory>() 
    .BuildSessionFactory(); 
+0

你確定你的.config文件中有',NHibernate'嗎?你得到的例外情況是另有建議。 –

+0

@AntonGogolev是的,我的配置中的那一行與上面顯示的代碼片段完全相同。如果你向右滾動它。 – ProfK

回答

0

PascalCase心態加上IDE自動完成背叛你;)

錯誤:

<property name="proxyfactory.factory_class">NHibernate.ByteCode.DefaultProxyFactoryFactory, NHibernate</property> 

正確:

<property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property> 

爲什麼Bytecode不符合其他命名空間的格式?

因爲Bytcode是一個完整的詞,而不是詞的組成,所以Pascal或 駱駝案例不適用於此。

反正,我不知道這一點,但我認爲,如果你在配置DefaultProxyFactoryFactory省略factory_class屬性默認情況下創建。有人可以證實嗎?

+0

我很早就放棄了基於xml的配置,轉而使用流暢,但我強烈懷疑你是正確的,基於我的OP中的代碼摘錄。我在XML中肯定有'ByteCode',並且肯定(感謝自動完成),在測試代碼中有'Bytecode',我可以實例化這個類。發現得好。 – ProfK

1

我可能來自與MSTEST(Vs2012)問題 見Here

您也可以嘗試DeploymentItemAttribute

如果它仍與失敗NUnit的可能你檢查all NHibernate dependencies存在於目錄中。

+0

我使用Nuget安裝了NHibernate。包中唯一的文件是'NHibernate.dll'和'NHibernate.xml',並且在構建之後的輸出文件夾中,只有這兩個NHibernate文件,加上'Iesi.Collections.dll'和'Iesi.Collections.xml '。 'DefaultProxyFactoryFactory'類應該是NHIbernate的內部類,不需要進一步的依賴關係。我會檢查你的MSTest鏈接,即使我在VS2015上,有點謝謝你試圖幫助。 – ProfK