Puede simular métodos virtuales, pero es mejor si utiliza una interfaz.
razón que digo esto es la siguiente:
var mockObject = new Mock<IMyObject>();
Si se utiliza un método virtual se convierte en:
var mockObject = new Mock<MyObject>(params...);
Estás obligados para incluir los parámetros de objetos concretos, pero obviamente no es necesario para las interfaces. Todas las pruebas que usan clases concretas requerirán actualización si decides cambiar el constructor de la clase en una fecha posterior. Me he quemado por esto en el pasado, así que trate de no usar métodos virtuales para probar más.
Debo agregar que al intentar simular tipos de concreto, está derrotando el propósito de los marcos de burla. Debería ser mocking roles, not types. Por lo tanto, trabajando para una abstracción, en este caso una interfaz es una gran cosa para hacer.
Otra razón es cómo funcionan las interfaces, las interfaces establecen un contrato, pero no el comportamiento. Deben usarse cuando tienes implementaciones múltiples, y clasifico las pruebas como un comportamiento, de ahí la razón válida para introducir una nueva interfaz.
Usted acaba de preguntar esto. No repita http://stackoverflow.com/questions/1961778/help-with-this-unit-test-using-moq –
Aconsejaría cerrar/eliminar su otra pregunta si puede. Las respuestas aquí son lo que quieres. No hay punto para duplicarlos. – Finglas
Vamos a cerrar su otra pregunta en lugar de cerrar esta: esto parece más claro, y podría tener valor para los demás. – TrueWill