2010-04-26 14 views
10

Me encanta el nuevo mundo que es C#, he llegado a un punto con mis programas de juguete donde quiero comenzar a escribir algunas pruebas unitarias.C# Unit Testing - Generando Mock DataContexts/LINQ -> SQL classes

Mi código actualmente utiliza una base de datos a través de un objeto DatabaseDataContext (archivo * .dbml), ¿cuál es la mejor manera de crear una simulación para este objeto? Dado lo fácil que es generar la base de datos LINQ -> código SQL y cuán común debe ser una solicitud, espero que VS2010 tenga una funcionalidad integrada para ayudar con las pruebas.

Si estoy lejos y esto debe hacerse manualmente, ¿podría aclararme cuál es su enfoque preferido?

Muchas gracias,

Gavin

+0

Mire esta respuesta para ver cómo realizar una prueba eficaz y exitosa con LINQ to SQL: http://stackoverflow.com/questions/4128640/how-to-remove-unit-of-work-functionality-from-repositories- using-ioc/4132186 # 4132186 – Steven

Respuesta

5

El problema con el DataContext es que no está diseñado para burlarse.

Una herramienta gratuita para burlarse de lo inamovible es Moles from Pex (Pex moles?). Es aproximadamente equivalente a TypeMock.

3

La mejor manera que conozco es la de extraer la interfaz de este objeto y utilizarlo para crear el objeto de burla, por lo que realmente no importa si utiliza LinqToSql o EF para habla con la base de datos, o si hablas con cualquier base de datos.

+3

Excepto que no se puede cambiar una implementación de L2S para EF, ya que ambas generan modelos que son incompatibles entre sí. Las abstracciones con fugas son agudas. – Will

+1

@Will - buen punto. –

0

Pocas cosas que podrían ser útiles para usted:

Moq (pronunciado "Mock-te" o simplemente "Mock") es la biblioteca sólo burlarse de .NET desarrollado desde cero a aprovecha al máximo .NET 3.5 (es decir, árboles de expresión Linq) y C# 3.0 características (es decir, expresiones lambda) que lo hacen el más productivo, tipo seguro y amigable con la refactorización biblioteca burlona disponible. Y es compatible con interfaces de burla, así como las clases . Su API es extremadamente simple y directa, y no requiere conocimiento previo o experiencia con conceptos de burla.

LINQPad le permite de forma interactiva consulta bases de datos en un lenguaje de consulta moderna: LINQ. ¡Adiós a SQL Management Studio!

LINQPad apoya todo en C# 3.0 y Framework 3.5, y más:

LINQ a objetos LINQ a SQL y la Entidad LINQ marco a XML de datos de WCF Servicios & SQL Azure LINQ a SQLite y MySQL Enterprise Server Mindscape LightSpeed ​​ORM (incluso anticuado SQL!)

1

[Descargo de responsabilidad: yo trabajo en Typemock]

Usted puede utilizar Typemock Isolator para crear un objeto falso y establecer que es métodos para devolver lo que necesita:

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

Tome una mirada en esta publicación de blog sobre cómo falsificar Linq2Sql: Faking LINQ to SQL DataContext Tables with Isolator