簡體   English   中英

NHibernate:如何從單元測試項目中引用主項目的裝配?

[英]NHibernate: How to reference the assembly of the main project from the unit test project?

我構建了一個簡單的NHibernate應用程序,但是我想使用Mapping Attributes而不是Mapping XML。

現在,當我創建一個單元測試項目並想加載映射屬性時,我遇到了問題,即我的域對象在另一個項目中!

這是我的單元測試:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;

namespace Tests
{
[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        Configuration cfg = new Configuration();
        cfg.Configure();
        cfg.AddInputStream(NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(
            System.Reflection.Assembly.GetExecutingAssembly()));
        new SchemaExport(cfg).Execute(false, true, false);
    }
}

在這條線

cfg.AddInputStream(NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(
            System.Reflection.Assembly.GetExecutingAssembly()));

我得到這個異常:

Result Message: 
Test method Tests.UnitTest1.TestMethod1 threw exception: 
NHibernate.Mapping.Attributes.MappingException: The following assembly contains 
no mapped classes: Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Result StackTrace:  
at NHibernate.Mapping.Attributes.HbmSerializer.Serialize(Stream stream, Assembly assembly)
   at NHibernate.Mapping.Attributes.HbmSerializer.Serialize(Assembly assembly)
   at Tests.UnitTest1.TestMethod1() in ...Tests\UnitTest1.cs:Line 17.

我想代替

System.Reflection.Assembly.GetExecutingAssembly()

我必須以某種方式獲得我的主要項目的組裝。

我發現最簡單的方法是:

Assembly.Load("Project Name of Desired Assembly")

我在網上閱讀了很多相關內容,包括這篇文章,沒有什么比使用這種方法更簡單的了。 另外,JoelC提到的方法可能有效,但是我無法讓它們為我工作,這沒有問題。

是的,通常從單元測試中調用System.Reflection.Assembly.GetExecutingAssembly()會將單元測試運行器作為執行程序集。

您應該能夠調用typeof([TargetAssemblyClass]).Assembly來找到您的主項目程序集。 當然,這需要參考我希望您已經擁有的主要項目。

編輯:調用System.Reflection.Assembly.GetAssembly(typeof([TargetAssemblyClass]))是實現同一件事的另一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM