2010-04-26 31 views
10

我很喜欢C#这个新的世界,我已经对我的玩具程序有点了解,我想开始编写一些单元测试。C#单元测试 - 生成模拟DataContexts/LINQ - > SQL类

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

如果我没有办法,而且必须手动完成,那么请您就我的首选方法给我启发?

非常感谢,

加文

+0

看看这个答案,看看如何有效和成功地测试LINQ to SQL:http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories-使用-ioc/4132186#4132186 – Steven 2010-11-09 20:32:46

回答

5

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

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

3

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

+3

除了不能为EF执行L2S的实现,因为它们都生成彼此不兼容的模型。漏泄的抽象是有漏洞的。 – Will 2010-04-26 12:38:01

+1

@愿意 - 好点。 – 2010-04-26 13:06:11

0

几件事情可能对您有用:

MOQ(发音为 “讥笑你” 或只是 “模拟”)是唯一的嘲弄库 为.NET从头开发到 充分利用.NET 3.5(即 Linq表达式树)和C#3.0 特性(即lambda表达式) ,使其成为最具生产力, 类型安全和重构友好 嘲笑库可用。它支持模拟接口以及 类。其API非常简单,并且简单易懂,并且不需要 需要任何先前知识或 体验嘲笑概念。

LINQPad,您可以在现代查询语言交互查询 数据库: LINQ。亲亲再见SQL管理 Studio!

LINQPad支持C#3.0 和框架3.5,和更多的东西:

LINQ到对象LINQ to SQL和实体 框架的LINQ to XML WCF数据 服务& SQL Azure中的LINQ to sqlite的 和MySQL企业级服务器Mindscape LightSpeed ORM(即使是老式的 SQL!)