人们如何对使用Linq to SQL的代码进行单元测试?
更新:
Fredrik在他的博客上提供了一个关于如何对linq2sql应用程序进行单元测试的示例解决方案.您可以在以下位置下载:
http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx
我不仅认为他发布了一个示例解决方案,他还设法为所有类提取接口,这使得设计更加分离.
我的老帖子:
*我发现这些博客我认为是制作DataContext包装器的良好开端: Link1 Link2
它们几乎涵盖了相同的主题,除了第一个主题实现了为表提取接口的方法.第二个更广泛,所以我也包括它.*
迟了3年,但这就是我这样做的方式:
https://github.com/lukesampson/LinqToSQL-test-extensions/
无需编写包装器或执行大量管道工作,只需将T4模板放在.dbml旁边即可获得:
数据上下文的接口,例如IExampleDataContext
数据上下文的内存模拟,例如MemoryExampleDataContext
两者都将自动使用您已在DBML中配置的映射.
所以你可以做的事情
public class ProductRepo { IExampleDataContext DB { get; set }; public ProductRepo(IExampleDataContext db) { DB = db; } public ListGetProducts() { return DB.Products.ToList(); } }
你可以用任何一个来调用它
new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing
要么
new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB