2012-07-09 14 views
11

Do testowania jednostkowego używam NUnit 2.6 i Moq 4.0. Istnieje szczególny przypadek dotyczący wirtualnych członków, w których obiekty proxy Moq nie przekazują wywołań metod do rzeczywistej implementacji (prawdopodobnie według projektu). Na przykład, gdybym miał klasę ...Makiety wirtualnych członków w Moq

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

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

... i używam Min przesłonić metodę GetSomethingElse „s A() w moim urządzeniu testowym ...

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

... używając metoda estetyczna A działa wspaniale; jednakże, jeśli cokolwiek we wspomnianej metodzie wywołuje niezapowiedziane metody, nie wykona niczego i/lub zwróci wartości domyślne, nawet jeśli rzeczywiste wdrożenie istnieje w MyClass.

Czy istnieje sposób obejścia tego? Czy używam niewłaściwego Moq?

Dzięki z góry,
Manny

Odpowiedz

17

Set mock.CallBase = true i powinno być dobrze iść.

+0

co, jeśli nadal chcesz drwić z innych metod? –

+1

@LouisRhys Całkiem pewne, że to nie przeszkadza - jeśli jawnie kpisz, ustawienie "CallBase" nigdy nie wchodzi w grę. –

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

Lepiej dołączyć objaśnienie kodu wraz z odpowiedzią. – EJoshuaS