c# - 如何在不使用模拟的情况下使用数据库对项目进行单元测试?

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

我们使用 razor view、c#、MVC3、.net 4.0 开发了一个应用程序。我们希望在不进行模拟的情况下对 Controller 进行单元测试。我们的需求是:需要调用并执行Repository方法,并使用数据库进行测试。请提供一些解决方案。

最佳答案

单元测试往往不使用数据库或远程服务器连接等外部资源。这就是模拟的用途。

我相信有时让测试访问此类资源可能会很有用。 (但我们称它们为...验收测试?或集成测试 - 只是为了区分这些测试和经典的单元测试)。

看看MBUnit测试框架(与 nUnit 非常相似),它允许您非常轻松地完成它,它允许自动回滚对数据库的所有更改(因此您最终不会每次都将数据库恢复到“干净”状态)您想要运行测试的时间)。看看这篇详细描述它的博客文章:http://blog.benhall.me.uk/2008/01/mbunit-24-rollback-rollback2-and.html

另一种方法是拥有一个特殊的数据库并生成数据 - 即每次运行一堆测试时生成新的用户 ID 名称等。请注意,在这种方法中,可能会发生数据库需要不时清理的情况(与名称等某些值发生冲突,也可能无法使用已经填充了一些数据的数据库来测试某些场景)。

这两种方法都假设数据库架构不会更改。如果数据库架构发生变化 - 无论如何它都会涉及一些工作。

关于c# - 如何在不使用模拟的情况下使用数据库对项目进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293883/

相关文章:

PHP RedBean 存储 bean(如果不存在)

ruby-on-rails - 将数据库模型转换为 Ruby On Rails 上的模型

jquery - 对象不支持属性或方法 'dialog'

c# - 我可以/应该在这里使用异步 Controller 吗? (ASP.NET MVC 3)

c# - Wpf Prism 区域导航

C# 依赖项未包含在发布中

c# - 将 Vici Cool Storage 与 monodroid 一起使用

C# 在嵌套命名空间中使用命名空间指令

mysql - 当数据库增长时,它的运行速度往往会变慢?

c# - 您必须指定一个有效的 JavaScript API 域作为此 key 配置的一部分。在领英