C#unit testing – 生成模拟DataContexts / LINQ – > SQL类

我喜欢C#的新世界,我已经开始尝试我的玩具程序,我想开始编写一些unit testing。

我的代码目前通过DatabaseDataContext对象(* .dbml文件)使用数据库,为这个对象创建模拟的最佳方法是什么? 鉴于生成数据库LINQ – > SQL代码是多么容易,以及请求的常见程度,我希望VS2010具有内置function来帮助进行测试。

如果我要离开,这必须手动完成,请你告诉我你的首选方法?

非常感谢,

加文

DataContext的问题在于它不是为mocking而设计的。

嘲笑不可嘲笑的免费工具是Pex的Moles(Pex moles?) 。 它大致相当于TypeMock。

我知道的最好的方法是提取这个对象的接口并使用它来创建模拟对象,所以如果你使用linqtosql或EF与数据库交谈,或者你根本不和任何数据库交谈,那真的无关紧要。

[免责声明:我在Typemock工作]

您可以使用Typemock Isolator创建一个假对象并设置它的方法来返回您需要的东西:

var fakeContext = Isolate.Fake.Instance(); 

看看这篇关于如何伪造Linq2Sql的博文: 使用Isolator伪造LINQ to SQL DataContext表

很少有可能对你有用的东西:

  • MOQ

Moq(发音为“Mock-you”或者只是“Mock”)是.NET从头开发的唯一一个模拟库,它充分利用了.NET 3.5(即Linq表达式树)和C#3.0特性(即lambda表达式)它是最高效,类型安全和重构友好的模拟库。 它支持模拟接口和类。 它的API非常简单直接,不需要任何先前的知识或经验来模拟概念。

  • LINQ Pad。

LINQPad允许您以现代查询语言交互式查询数据库:LINQ。 与SQL Management Studio亲吻再见!

LINQPad支持C#3.0和Framework 3.5中的所有内容,以及更多:

LINQ to Objects LINQ to SQL和entity frameworkLINQ to XML WCF数据服务和SQL Azure LINQ to SQLite和MySQL Enterprise Server Mindscape LightSpeed ORM(甚至是老式的SQL!)