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

Pet*_*ter 54 linq unit-testing linq-to-sql

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

Pre*_*ten 14

更新:

Fredrik在他的博客上提供了一个关于如何对linq2sql应用程序进行单元测试的示例解决方案.您可以在以下位置下载:

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

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

我的老帖子:

*我发现这些博客我认为是制作DataContext包装器的良好开端: Link1 Link2

它们几乎涵盖了相同的主题,除了第一个主题实现了为表提取接口的方法.第二个更广泛,所以我也包括它.*

  • 链接似乎已经死了 (5认同)

Luk*_*son 6

迟了3年,但这就是我这样做的方式:

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

无需编写包装器或执行大量管道工作,只需将T4模板放在.dbml旁边即可获得:

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

两者都将自动使用您已在DBML中配置的映射.

所以你可以做的事情

public class ProductRepo {
    IExampleDataContext DB { get; set };
    public ProductRepo(IExampleDataContext db) {
        DB = db;
    }

    public List<Product> GetProducts() {
        return DB.Products.ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以用任何一个来调用它

new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing
Run Code Online (Sandbox Code Playgroud)

要么

new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB
Run Code Online (Sandbox Code Playgroud)