人们如何使用Linq to SQL进行单元测试代码
人们如何对使用Linq到SQL的代码进行单元测试?
解决方案
回答
通常,我们不需要测试使用LINQ to SQL的代码部分,但是如果我们确实愿意,则可以使用针对服务器查询的相同数据集,并将它们转换为内存中对象,然后对此运行LINQ查询(这将使用Enumerable方法而不是Queryable方法)。
另一个选择是使用Matt Warren的DataContext的可模拟版本。
我们还可以通过调试器(从IQueryable对象)获取LINQ to SQL使用的SQL语句,手动对其进行检查,然后将其包括在自动化测试中。
回答
Linq使测试变得更加容易。 Linq查询在List上的工作与在Linq-to-sql上的工作一样好。我们可以将Linq换成SQL以获得列表对象,然后进行测试。
回答
包装DataContext,然后模拟包装器。它是最快的完成方法,需要对测试进行编码,有些人认为这很奇怪。但是有时候,当我们具有无法(轻松)嘲笑的依赖项时,这是唯一的方法。
回答
Mattward在The Wayward Web Log上发表了一篇精彩的文章,内容涉及如何模拟可扩展的Linq2Sql数据上下文。签出-MOCKS NIX一个可扩展的LINQ到SQL DATACONTEXT
回答
更新:
Fredrik在他的博客上提供了一个示例解决方案示例,说明如何对linq2sql应用程序进行单元测试。我们可以在以下位置下载它:
http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx
我不仅为他发布了示例解决方案感到非常高兴,而且还设法提取了所有类的接口,这使设计更加分离。
我的旧帖子:
*我发现这些博客是制作DataContext包装器的一个很好的开始:
链接1
链接2
它们涵盖几乎相同的主题,不同之处在于第一个实现了为表提取接口的方法。第二个虽然更广泛,所以我也将其包括在内。*
回答
LINQ to SQL实际上非常适合单元测试,因为它具有根据DBML中定义的内容快速创建数据库的能力。
通过DataContext创建数据库并使其空着来测试ORM层确实非常好。
我在以下博客中介绍了它:http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql。 aspx