映射集成测试NHibernate Mapping

时间:2012-12-17 12:57:32

标签: unit-testing nhibernate s#arp-architecture

此处的设置方法:

NHibernate unit test

使用NHibernate.config:

[SetUp]
public virtual void SetUp()
{
    var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();
    this.configuration = NHibernateSession.Init(
    new SimpleSessionStorage(),
    mappingAssemblies,
    new AutoPersistenceModelGenerator().Generate(),
    "../../../Northwind.Web/NHibernate.config");
}

这是不是有点狡猾,因为它引入了外部依赖?我想也可以通过编程方式创建NHibernate.config,并将其传递给正确的Init方法siganture。我是否正确并且在安装过程中有人这样做了?感谢。

2 个答案:

答案 0 :(得分:3)

我成功地在我目前的项目上采用了类似的方法。首先它不是单元,而是映射集成测试,因为涉及外部资源,即数据库,测试的执行时间和典型的技术问题:

  1. 最好不要使用现有的数据库模式,而是每次使用随机模式名称的配置从nHibernate创建并导出它。这将消除两个或更多开发人员在同一模式上同时运行集成测试的可能性:

    var export = new SchemaExport(configuration); export.Execute(script:false,export:true,justDrop:false,connection:databaseConnection,exportOutput:null);

  2. 请记住在使用后清理此架构。几天内很容易耗尽磁盘空间等

  3. 考虑将此代码从{[SetUp]}移到{[FixtureSetUp]}以节省测试夹具执行时间。与通常的内存中单元测试执行时间相比,使用数据库需要花费大量时间

  4. 由于时间和资源消耗,开发人员/ CI服务器可以较少地触发此类测试,与通常的单元测试相比。在我的项目中,它们仅在夜间构建或手动触发的构建期间安排。

  5. 您可以在运行时生成nHibernate配置,因此不需要“../../../Northwind.Web/NHibernate.config”

  6. 在许多情况下,您可以使用SQLite,而不是使用SQL Server,但映射通常特定于每个SQL引擎

答案 1 :(得分:1)

你可以按照你提到的方式编写,或者只是在你的测试项目中创建一个不同的NHibernate.Config,或者只是在你的项目中添加一个链接到实际的nhibernate.config(右击项目,添加现有项目,找到NHibernate.Config然后单击添加旁边的箭头,然后选择“添加为链接”,而不是单击添加。

我想说真正狡猾的部分是使用生产中的NHibernate.Config进行测试。

我过去做过这样的事情,我们会专门为测试创建一个数据库(通过db迁移工具)并将其用于我们的测试。通过使用创建的数据库详细信息生成测试的配置文件,或生成与测试项目中的配置匹配的数据库。