如何使用SQLite对sql视图进行单元测试

时间:2010-12-23 11:51:55

标签: c# asp.net-mvc unit-testing mocking

我正在使用linq对我的项目进行nhibernate,我正在使用Mock和SQLLite编写单元测试。 域对象使用流畅的nhibernate映射到sql视图。

问题是这个域对象使用sql视图有源,而且这个视图有来自许多表的数据,只有MsSQL知道这一点。我不知道如何模仿这个。

如何使用Mock和SQLite对sql视图进行单元测试?

»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

编辑:

对不起,我的问题不太清楚。让我重新说一下。

我正在使用nhibernate,并使用SQLLite编写单元测试。 在某些情况下,我的域对象被映射到视图而不是表,因此我配置了流畅的nhibernate映射,以便在SQLite数据库模式中不生成相应的表。

这在开发环境中有效,因为之后在MsSQL数据库中手动创建视图,但我无法在单元测试中测试相应的存储库,因为它们使用SQLite。

如何使用SQLite对SQL视图进行单元测试?

2 个答案:

答案 0 :(得分:6)

我从来没有理解那些想要测试其持久性层并想知道如何模拟它的人。如果从测试中消除数据库,测试数据库的重点是什么?

如果您正在尝试测试数据库,请不要嘲笑它。一旦你完成了令你满意的事情,并且你想继续使用数据库的服务,那么我认为模拟数据库是合适的(因为你已经测试过了)。

话虽如此,数据库测试还有一些特殊注意事项:

  1. 确保您拥有所需的测试数据。
  2. 保证真实数据的安全。
  3. 在测试运行之前和之后使测试数据库处于相同状态。

答案 1 :(得分:0)

我找到了解决方案。

我已经更改了映射,因此在单元测试中它会生成域对象的映射,在SQLite中创建一个表而不是视图。 有了这个,我可以在测试环境中创建该对象的存储库。