2012-07-09 12 views
11

Per il test dell'unità, sto utilizzando NUnit 2.6 e Moq 4.0. C'è un caso particolare relativo ai membri virtuali in cui gli oggetti proxy di Moq non inviano chiamate di metodo all'attuazione effettiva (probabilmente in base alla progettazione). Per esempio, se ho avuto una classe ...Mocking di membri virtuali in Moq

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

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

... e io uso Moq di ignorare GetSomethingElse s' A() metodo nel mio dispositivo di prova ...

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

... utilizzando il metodo di simulazione A funziona splendidamente; tuttavia, se qualcosa in detto metodo chiamerebbe il metodo non deriso B, il metodo non eseguirà nulla e/o restituirà valori predefiniti, anche se esiste un'implementazione effettiva in MyClass.

C'è un modo per aggirare questo problema? Sto usando Moq sbagliato?

Grazie in anticipo,
Manny

risposta

17

Set mock.CallBase = true e si dovrebbe essere pronti per partire.

+0

e se si desidera ancora prendere in giro altri metodi? –

+1

@LouisRhys Abbastanza sicuro che questo non interferisca con esso - se si prende in giro in modo esplicito qualcosa l'impostazione di 'CallBase' non entra mai in gioco. –

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

È meglio includere alcune spiegazioni del codice insieme alla risposta. – EJoshuaS

Problemi correlati