2010-02-01 17 views
6

Mam prywatną metodę, która powinna powrócić true.I m przy użyciu NUnit i MOQ Mam więc następująco:W jaki sposób mogę zapewnić/zweryfikować metodę chronioną przez Moq?

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    // How do I assert it now since I cannot do 
    customerMock.Verify //Verify does not exists. 
} 

nie mógł znaleźć coś na google, który mówi, jak go przetestować. jak widać mogę zrobić zestaw dla niego, ale nie mogę potwierdzić.

Czy brakuje mi oczywistości? Wielkie dzięki.

Odpowiedz

3

Nie chcesz testować metody na próbce. Chcesz przetestować metodę na instancji rzeczywistej klasy. Droga do klasy test a private method polega na użyciu akcesora. Zauważ, że VS dostarczy je automatycznie, lub możesz "przetoczyć własne" za pomocą refleksji. W przypadku metody wewnętrznej można również ustawić InternalsVisibleTo na swój projekt testowy w pliku AssemblyInfo.cs.

[TextFixture] 
public class CustomerTestFixture 
{ 
    var customer = new Customer(); 
    var accessor = new Customer_Accessor(new PrivateObject(customer)); 

    Assert.IsTrue(accessor.CanTestPrivateMethod()); 

} 

Podczas wyśmiewania obiektu, zakłada się, że obiekt ten jest używany jako zależność dla rzeczywistej badanej klasy. Dlatego wystarczy ustawić fałszywy obiekt, aby zwrócić określone wartości. Robisz swoje twierdzenia na temat klasy, która korzysta z zależności, a nie na fałszywej klasie. Krok weryfikacyjny zapewnia, że ​​badana klasa nazywa metody na fałszywych obiektach zgodnie z oczekiwaniami, które ustaliłeś.

+0

Dziękuję za odpowiedź. Chcę mój obiekt makiety.CanTestPrivateMethod, aby zwrócić określone wartości. Więc jeśli hardcode "return true" w mojej prywatnej metodzie. Czy nadal mogę to potwierdzać? Moim zdaniem nie powinienem w ogóle testować prywatnej metody, ale mój kolega nalega na tę. Po prostu próbuję dowiedzieć się, jak to zrobić, używając MOQ. – user9969

+1

Brakuje mi mojego punktu. Nie kpij z badanego obiektu. Tylko kpisz z jego zależności. Utwórz rzeczywistą instancję, skonfiguruj warunki, aby metoda prywatna zwróciła określoną wartość, a następnie użyj akcesora, aby sprawdzić, czy metoda faktycznie zwraca tę wartość. Jedyną potrzebą mocks byłoby, gdyby instancja miała pewne zależności, których używałbyś w swojej prywatnej metodzie. – tvanfosson

+0

Dziękuję za poświęcony czas i odpowiedź. Teraz mam rację. – user9969

Powiązane problemy