使用NHibernate清除数据库的最快方法是什么?

时间:2010-03-17 11:14:08

标签: nhibernate integration-testing

我打算执行一些自动集成测试。这需要将数据库重新置于“干净状态”。这是最快/最好的方法吗?

var cfg = new Configuration();  
cfg.Configure();  
cfg.AddAssembly("Bla"); 
new SchemaExport(cfg).Execute(false, true, false);

5 个答案:

答案 0 :(得分:2)

            var se = new SchemaExport(conf);
        se.Drop(false, true);
        se.Create(false, true);

答案 1 :(得分:0)

是的,几乎是。您不必在每次测试之前创建新的配置对象,您可以在创建一次时重用它。您可以使用像sql-lite这样的内存数据库来加快测试速度。

答案 2 :(得分:0)

我的集成测试在基类构造函数中创建SessionFactory,在测试夹具设置中执行SchemaExport。我还测试SQLite作为内存数据库运行以获得额外的速度。

Ayende在这个blog post中给出了这种方法的一个很好的例子。 Tobin Harris'article包括drop / create vs delete的时间数据。

答案 3 :(得分:0)

我使用Proteus,它是一个开源库。在每次测试之前,都会自动保存您的数据集,加载您要测试的集合(例如,一个空DB)。在每次测试之后,在最后一次测试之后重新加载数据集,在恢复测试之前数据存在于数据库中。

答案 4 :(得分:0)

由于NHibernate是独立于数据库的另一个有趣的选项,如果你让它生成你的数据库,就是对内存中的SQLite这样的东西进行测试。事情会以这种方式运行得更快。

这是一个article,展示如何使用ActiveRecord执行此操作,但您可以使用该概念并在没有ActiveRecord的情况下使用它。

如果您在使用它时遇到问题,那么这是一个discussion(我最初做过)。