集成测试实体框架,需要一个不同的数据库服务器?

时间:2013-02-24 07:57:56

标签: c# sql-server entity-framework testing sql-server-ce

我正在尝试继续我的实体框架+测试体验。我在NUnit中编写了测试,删除表,创建一个新的数据库,在测试所需的表中创建行,进行测试,然后重复。

有一篇关于two different test strategies的好文章解释了使用Effort(在内存数据库中)进行测试存在一些缺点。无论如何,我确实非常喜欢对实际数据库进行测试,因为那时我可以验证真实的数据库,以验证数据库中是否以及如何结束。

然后我遇到了this帖子,在那里我可以读到我应该/可以为我的应用程序和我的测试提供不同的数据库服务器。例如。应用程序针对SQL Server运行,而测试针对SQL Server CE运行。

我现在有几个可以在SQL Server Express上运行的集成测试。我的应用程序在相同的连接字符串上运行,针对同一数据库服务器实例。

这是不明智的吗?

从长远来看,我遇到了麻烦吗?

是否可以确认并解释是否需要/建议为应用程序(SQL Server)和集成测试(SQL Server CE)使用不同的数据库服务器?

提前多多感谢。

1 个答案:

答案 0 :(得分:7)

将SQL Server用作数据库,将SQL Server CE用作测试数据库可能是值得的。这很常见,因为对于这些测试通常执行的操作,在SQL Server CE而不是SQL Server上运行测试可能会更快(创建整个数据库,执行快速事务,然后完全销毁它)。这也意味着您不需要在开发计算机上安装完整的SQL Server。

但是,没有必要这样做。有些人可能也不想这样做。您甚至可能在程序中使用仅在SQL Server上可用的功能,这基本上意味着您将无法使用SQL Server CE。

最后,您的代码可能与SQL Server CE一起使用,但不能与SQL Server一起使用,因此在测试期间不会出现问题。有一次,我针对MySQL运行了一个应用程序,但是使用了sqlite来运行一些测试。 sqlite与MySQL的工作方式略有不同,导致我的程序在测试中工作正常,但在实时失败。

所以,我仍然建议能够测试你将在现场使用的相同类型的数据库。您总是可以找到中间立场,例如针对SQL Server CE测试数据库进行开发,然后在使用新版本之前切换到SQL Server上的测试以覆盖该情况。