[英]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.