我已经找了几天的解决方案,可以找到任何有助于解决我的问题的方法。 我有一个WCF服务,我必须进行一些单元测试。问题是服务以这种方式从数据库中获取数据:
using (var context = new MyProjectEntities())
{
//here goes the actions
}
MyProjectEntities是从edmx模型自动生成的我猜...(数据库优先) 所以这种方式它从数据库中获取所有数据并对其进行操作。 我的问题是:有没有正确的方法来提供虚假数据进行测试,而不是来自数据库的数据?
答案 0 :(得分:1)
最简单的方法是使用实时数据库。这不是太灵活,因为每次运行都需要一个处于固定初始状态的新数据库,并且多个开发人员也不能同时使用同一个数据库。
我们在我公司所做的是:使用单文件数据库,即SQL Server CE。如果您的代码与数据库引擎无关,那么这可以完全起作用,只需更改连接字符串,甚至可以通过将模板数据文件复制到正确的位置将数据库置于固定状态。这不是一个真正孤立的单元测试,但它实现起来非常简单,它没有上述问题,你基本上得到了你最终需要的东西。如果您的代码依赖于数据库引擎,那么现在您还有一个理由可以使用像NHibernate或Entity Framework这样的ORM解决方案。
最好,最灵活,也是最复杂的解决方案是使用依赖注入或模拟框架。这是教科书的内容,有大量关于此的文献,它将为您提供所有的灵活性。