2012-07-09 8 views
11

Para la prueba unitaria, estoy usando NUnit 2.6 y Moq 4.0. Hay un caso particular relacionado con los miembros virtuales donde los objetos proxy de Moq no retransmiten llamadas de método a la implementación real (probablemente por diseño). Por ejemplo, si tuviera una clase ...Burlando de miembros virtuales en Moq

public class MyClass { 
    protected virtual void A() { 
     /* ... */ 
    } 

    protected virtual void B(...) { 
     /* ... */ 
    } 
} 

... y utilizar para anular Moq GetSomethingElse 's A() método en mi aparato de prueba ...

var mock = new Mock<MyClass>(); 
mock.Protected().Setup("A").Callback(SomeSortOfCallback); 

... usando el método A del simulacro funciona espléndidamente; sin embargo, si algo en dicho método llamaría al método no burlado B, el método no hará nada y/o devolverá los valores predeterminados, incluso si existe una implementación real en MyClass.

¿Hay alguna forma de evitar esto? ¿Estoy usando Moq mal?

Gracias de antemano,
Manny

Respuesta

17

Conjunto mock.CallBase = true y usted debe ser bueno para ir.

+0

¿Qué pasa si aún quieres burlarte de otros métodos? –

+1

@LouisRhys Bastante seguro de que esto no interfiere con él: si se burla de algo explícitamente, la configuración 'CallBase' nunca entra en juego. –

-1
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true }; 
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...); 
var actual=systemUnderTest.Object.BulkInsert(...); 
+3

Es mejor incluir alguna explicación del código junto con su respuesta. – EJoshuaS

Cuestiones relacionadas