C#单元测试 - 生成模拟DataContexts / LINQ -> SQL类

10

我喜欢C#这个新世界,我的玩具程序已经到了需要开始编写一些单元测试的地步。

我的代码目前通过一个DatabaseDataContext对象(*.dbml文件)使用数据库,那么创建此对象的mock的最佳方法是什么?考虑到生成数据库LINQ -> SQL代码非常容易,并且这是一个很常见的请求,我希望VS2010内置了一些功能来帮助测试。

如果我想得太离谱,必须手动完成,请告诉我您的首选方法。

非常感谢,

Gavin


看看这个答案,了解如何有效地使用LINQ to SQL进行测试并取得成功:https://dev59.com/_W855IYBdhLWcg3w0H13#4132186 - Steven
4个回答

5

DataContext的问题在于它不适合进行模拟。

一个免费的用于模拟无法模拟的工具是Pex(Pex moles?)中的Moles。它大致相当于TypeMock。


3

我知道的最好方法是提取该对象的接口,使用它来创建模拟对象,这样无论您使用linqtosql还是EF与数据库通信,或者根本不与任何数据库通信,都不会有影响。


3
除非你放弃使用L2S并改用EF,否则你无法切换L2S实现,因为它们都生成不兼容的模型。泄漏的抽象本身就是有漏洞的。 - user1228

1

0

以下是一些可能对您有用的内容:

Moq(发音为“Mock-you”或仅为“Mock”)是唯一一个专为.NET从头开发的模拟库,以充分利用.NET 3.5(即Linq表达式树)和C# 3.0功能(即lambda表达式),使其成为最具生产力,类型安全和重构友好的模拟库。它支持模拟接口和类。其API非常简单直观,不需要任何关于模拟概念的先前知识或经验。

LINQPad可以让你交互式地使用现代查询语言LINQ来查询数据库。告别SQL Management Studio吧! LINQPad支持C# 3.0和Framework 3.5中的所有内容,以及更多功能:LINQ to Objects、LINQ to SQL和Entity Framework、LINQ to XML、WCF Data Services & SQL Azure、LINQ to SQLite和MySQL Enterprise Server、Mindscape LightSpeed ORM(甚至还有老式的SQL!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接