我打算执行一些自动集成测试。这需要将数据库重新置于“干净状态”。这是最快/最好的方法吗?
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly("Bla");
new SchemaExport(cfg).Execute(false, true, false);
答案 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(我最初做过)。