人们如何testing使用Linq to SQL的代码

人们如何testing使用Linq to SQL的代码?

更新:

Fredrik提供了一个关于如何在他的博客上进行unit testinglinq2sql应用程序的示例解决scheme。 您可以在以下url下载它:

http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx

我不仅认为他发布了一个示例解决scheme,他还设法为所有类提取接口,这使devise更加分离。

我的旧post:

*我发现这些博客,我认为是一个良好的开始,使DataContext包装: Link1 Link2

它们几乎涵盖了相同的主题,只是第一个实现了为表提取接口的手段。 第二个是更广泛的,所以我也包括它。

迟了3年,但是这是我做的:

https://github.com/lukesampson/LinqToSQL-test-extensions/

不需要编写一个包装器或者做大量的pipe道工作,只需在你的.dbml文件旁边放置T4模板,你就可以得到:

  1. 数据上下文的接口,例如IExampleDataContext
  2. 内存模拟你的数据上下文,例如MemoryExampleDataContext

两者都将自动使用您已经在DBML中configuration的映射。

所以你可以做一些事情

public class ProductRepo { IExampleDataContext DB { get; set }; public ProductRepo(IExampleDataContext db) { DB = db; } public List<Product> GetProducts() { return DB.Products.ToList(); } } 

你可以用这个来调用

 new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing 

要么

 new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB 

包装DataContext,然后模拟包装。 它是完成它的最快方法,它需要编码testing,有些人认为这是有味道的。 但是有时候,当你拥有不能(容易)嘲弄的依赖时,这是唯一的方法。

在Wayward Web Log上的 Mattwar有一篇关于如何模拟可扩展的Linq2Sql数据上下文的很棒的文章。 检查出来 – MOCKS NIX – 一个可扩展的LINQ TO SQL DATACONTEXT

Linq使testing更容易。 Linq查询和Linq-to-sql的工作一样。 您可以将Linq换成SQL列表对象并进行testing。

通常情况下,您不需要testing使用LINQ to SQL的代码部分,但是如果您真的想要的话,可以使用与服务器相同的数据集,并将它们转换为内存中的对象,运行LINQ查询(这将使用Enumerable方法而不是Queryable)。

另一种select是使用Matt Warren的DataContext的可模拟版本 。

您还可以通过debugging器(从IQueryable对象)获取LINQ to SQL使用的SQL语句,手动检查这些SQL语句,然后将其包含在自动化testing中。

LINQ to SQL实际上对unit testing非常好,因为它能够根据DBML中定义的内容快速创build数据库。

它使得通过DataContext创build数据库来testing一个ORM层是非常好的,并让它开始是空的。

我把它覆盖在我的博客上: http : //web.archive.org/web/20090526231317/http : //www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql。 ASPX