映射集成测试NHibernate映射



此处的设置方法:

NHibernate单元测试

使用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方法签名。我是正确的吗?有人在安装过程中这样做吗?谢谢

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

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

    var export=新的SchemaExport(配置);出口执行(script:false,export:true,justDrop:false,connection:databaseConnection,exportOutput:null);

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

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

  4. 与通常的单元测试相比,由于时间和资源消耗,develoeprs/CI服务器触发这种测试的频率可能更低。在我的项目中,它们只安排在夜间构建或手动触发的构建期间。

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

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

您可以按照前面提到的程序进行,也可以在测试项目中创建一个不同的NHibernate.Config,或者在项目中添加一个指向实际NHibernate.Config的链接(右键单击项目,添加现有项,找到NHibernat.Config,然后不单击添加,而是单击添加旁边的箭头并选择"添加为链接")。

我想说,真正不可靠的部分是使用生产中的NHibernate.Config进行测试。

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

最新更新