【发布时间】:2013-03-15 12:42:40
【问题描述】:
我正在对我们团队正在构建的 asp.net MVC 3 Web 应用程序进行单元测试。
问题是我们必须模拟很多东西,而我们的单元测试并没有涵盖所有与网络服务器和数据库相关的东西。
例子:
我有一个方法,代码如下:
public List<Useraccount> GetUseraccounts(Company company)
{
return company.Useraccounts.ToList<Useraccount>();
}
我的开发人员抱怨他必须注入一个他自己准备的假公司对象。他想从数据库中获得一个真实的对象。
我的问题: 是否可以在单元测试中使用真正的数据库(也可以是 SQLite/SQLExpress 或其他东西)?这有用吗? 有什么好处和坏处?
如果没有真正的数据库,我们需要模拟太多的对象。例如,我们无法验证此类调用是否有效:
Useraccount useraccount = UnitOfWork.UseraccountRepository.Get(u => u.EnableCode == enableCode && u.IsEnabled == false).Single<Useraccount>();
【问题讨论】:
-
听起来你可能会模糊 unit 测试和 integration 测试之间的界限。
-
什么意思?真正的数据库内容仅用于集成测试?
-
我相信@Forty-Two 的意思是你应该考虑两套测试。一个是关于单元测试,测试你的类做他们应该做的事情和模拟依赖关系。然后,您可以进入下一个级别的黑盒/集成测试,您可以在其中全面测试您的服务,但在需要时模拟第三方服务。
-
是的,但我实际上无法测试像 Useraccount useraccount = UnitOfWork.UseraccountRepository.Get(u => u.EnableCode == enableCode && u.IsEnabled == false).Single 这样的方法。用户帐户>();因为 EF。
标签: asp.net asp.net-mvc entity-framework unit-testing moq