2010-09-16 22 views
6

Para mis pruebas necesito burlarme del cliente de datos, en mi caso son Oracle.¿Cómo puedo simular una OracleConnection y OracleCommand?

He creado mi capa de acceso de datos para permitir que esto puede pasar en:

public static Int32? GetUserRoleId(string userName, OracleConnection cn, OracleCommand cmd) 

estoy usando Moq, aunque puedo cambiar a otro marco, si es necesario, y cuando voy a crear los objetos Mock de esta manera:

Mock<OracleConnection> mockOracleConnection = new Mock<OracleConnection>(); 
Mock<OracleCommand> mockOracleCommand = new Mock<OracleCommand>(); 

consigo este error:

Failure: System.ArgumentException : Type to mock must be an interface or an abstract or non-sealed class.

Conclusión: ¡Esto fue más simple de lo que pensaba! Sólo burlarse de la función de la capa DAL así:

mockDao.Setup(a => a.GetUserRoleId(userName, It.IsAny<OracleConnection>(), It.IsAny<OracleCommand>())).Returns(1); 

Respuesta

12

Se pueden realizar cambios para usar interfaces de uso IDbConnection y IDbCommand (y tienen una fábrica para proporcionar los objetos reales en el código principal y objetos simulados en la prueba - normalmente mediante la inyección de dependencias)

Moq solo puede simular interfaces y métodos virtuales.

0

Estás tratando de burlarse de una clase sellada: puedes mirar here.

BTW: Como @Aliostad said, dicho framework - la mayoría de los frameworks falsos que he visto también - pueden simular solo clases de Interfaces/Abstract.

Cuestiones relacionadas