我打算执行一些自动化集成测试。这要求将数据库恢复到“干净状态”。这是最快/最好的方法吗?什么是使用NHibernate清除数据库的最快方法?
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly("Bla");
new SchemaExport(cfg).Execute(false, true, false);
我打算执行一些自动化集成测试。这要求将数据库恢复到“干净状态”。这是最快/最好的方法吗?什么是使用NHibernate清除数据库的最快方法?
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly("Bla");
new SchemaExport(cfg).Execute(false, true, false);
是的,它几乎是。您不必在每次测试之前创建一个新的配置对象,您可以在创建一次后重新使用它。您可以使用像sql-lite这样的内存数据库进行测试,从而加快速度。
我使用Proteus,它是一个开源库。在每次测试之前,都会自动保存您的数据集,加载您想要测试的设备(例如空的数据库)。每次测试后,数据集将在最后一次测试后重新载入,数据在测试恢复前出现在数据库中。
由于NHibernate是数据库独立的另一个有趣的选择,如果你让它产生你的数据库是运行你的测试对像内存中的SQLite的东西。事情会以更快的速度运行。
这里是一个article关于如何使用ActiveRecord来做到这一点,但你可以采取这个概念,并使用它没有ActiveRecord。
如果您无法正常工作(这是我一开始就做的),这里是一个discussion。
var se = new SchemaExport(conf);
se.Drop(false, true);
se.Create(false, true);
请参阅http://www.tobinharris.com/past/2009/8/1/in-memory-sqlite-testing-with-nhibernate/ –