【发布时间】:2012-10-25 13:37:32
【问题描述】:
目前,我有一个单元测试框架,我在内存中使用 SQLite 数据库和 NHibernate 进行单元测试。每个单元测试都在自己的会话中运行以确保独立性。在大多数情况下,这很棒,但是当我接近 150 次测试时,它开始运行有点慢。这样做的主要原因是,在每次测试之前,我必须在数据库中插入大量数据。
基本上我的应用程序是一个工作流应用程序,我们在数据库中存储了大量有关工作流的信息(步骤数、每个步骤的字段等)。除非有这些东西,否则应用程序无法运行,因此我的测试需要它。
此时,我的总测试时间中大约有 4 分钟用于在每次单元测试之前填充数据库。我很想在每次测试执行时让这个人口发生一次,但由于在会话关闭时内存数据库被破坏,我不确定如何。有什么建议吗?
【问题讨论】:
-
模拟您的存储库。获取存储库以返回测试所需的实体对象。这非常快。我有一个包含 900 多个测试的项目,不到一分钟就可以运行。
-
这是可能的,但需要大量额外的代码。我现在直接使用数据库的优势是我的部署脚本和我的测试设置代码是相同的。我也没有为严格的存储库设置而烦恼,而是在ayende.com/blog/3955/repository-is-the-new-singleton 遵循ayende 的指导。结果,我在许多情况下直接与 ISession 交互。当然,在一个可以模拟的简单抽象层中并不会太难,但我希望有更简单的东西。
标签: sqlite unit-testing nhibernate