人们如何使用Linq to SQL进行单元测试代码

时间:2020-03-05 18:50:16  来源:igfitidea点击:

人们如何对使用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