简体   繁体   English

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

[英]C# Unit Testing - Generating Mock DataContexts / LINQ -> SQL classes

I am loving the new world that is C#, I've come to a point with my toy programs where I want to start writing some unit tests. 我喜欢C#的新世界,我已经开始尝试我的玩具程序了,我想开始编写一些单元测试。

My code currently uses a database via a DatabaseDataContext object (*.dbml file), what's the best way to create a mock for this object? 我的代码目前通过DatabaseDataContext对象(* .dbml文件)使用数据库,为此对象创建模拟的最佳方法是什么? Given how easy it is to generate the database LINQ -> SQL code and how common a request this must be I'm hoping that VS2010 has built in functionality to help with testing. 鉴于生成数据库LINQ - > SQL代码是多么容易,以及请求的常见程度,我希望VS2010具有内置功能来帮助进行测试。

If I'm way off and this must be done manually could you please enlighten me as to your preferred approach? 如果我要离开,这必须手动完成,请您告诉我您的首选方法?

Many Thanks, 非常感谢,

Gavin 加文

The problem with the DataContext is that it isn't designed for mocking. DataContext的问题在于它不是为mocking而设计的。

A free tool for mocking the unmockable is Moles from Pex (Pex moles?) . 一个免费的模拟不可嘲弄的工具是来自Pex的Moles(Pex moles?) Its roughly equivalent to TypeMock. 它大致相当于TypeMock。

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

[Disclaimer: I work at Typemock] [免责声明:我在Typemock工作]

You can use Typemock Isolator to create a fake object and set it's methods to return what you need: 您可以使用Typemock Isolator创建一个假对象并设置它的方法以返回您需要的内容:

var fakeContext = Isolate.Fake.Instance<DatabaseDataContext>();

Take a look at this blog post on how to fake Linq2Sql: Faking LINQ to SQL DataContext Tables with Isolator 看看这篇关于如何伪造Linq2Sql的博文: 使用Isolator伪造LINQ to SQL DataContext表

Few things which might be useful for you: 很少有可能对你有用的东西:

Moq (pronounced "Mock-you" or just "Mock") is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 (ie Linq expression trees) and C# 3.0 features (ie lambda expressions) that make it the most productive, type-safe and refactoring-friendly mocking library available. Moq(发音为“Mock-you”或只是“Mock”)是.NET从头开发的唯一一个模拟库,可以充分利用.NET 3.5(即Linq表达式树)和C#3.0特性(即lambda表达式)它是最高效,类型安全和重构友好的模拟库。 And it supports mocking interfaces as well as classes. 它支持模拟接口和类。 Its API is extremely simple and straightforward, and doesn't require any prior knowledge or experience with mocking concepts. 它的API非常简单直接,不需要任何先前的知识或经验来模拟概念。

LINQPad lets you interactively query databases in a modern query language: LINQ. LINQPad允许您以现代查询语言交互式查询数据库:LINQ。 Kiss goodbye to SQL Management Studio! 与SQL Management Studio亲吻再见!

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

LINQ to Objects LINQ to SQL and Entity Framework LINQ to XML WCF Data Services & SQL Azure LINQ to SQLite and MySQL Enterprise Server Mindscape LightSpeed ORM (Even old-fashioned SQL!) LINQ to Objects LINQ to SQL和实体框架LINQ to XML WCF数据服务和SQL Azure LINQ to SQLite和MySQL Enterprise Server Mindscape LightSpeed ORM(甚至是老式的SQL!)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM