• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# - po co używać Mock.Verify?

Object Storage Arubacloud
0 głosów
418 wizyt
pytanie zadane 19 kwietnia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
edycja 21 kwietnia 2020 przez dawid2002

Witam! Ostatnio na stacku widziałem taki kod:

class MyClassTest
{
    [TestMethod]
    public void MyMethodTest()
    {
        string action = "test";
        Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();

        mockSomeClass.Setup(mock => mock.DoSomething());

        MyClass myClass = new MyClass(mockSomeClass.Object);
        myClass.MyMethod(action);

        // Explicitly verify each expectation...
        mockSomeClass.Verify(mock => mock.DoSomething(), Times.Once());

        // ...or verify everything.
        // mockSomeClass.VerifyAll();
    }
}

Z tego co mi wiadomo Verify służy do sprawdzania ile razy wywołano daną metodę. Patrząc na powyższy kod zastanawiam się po co testować czy wywołano raz wyrażenie "mock => mock.DoSomething()" skoro wyżej jest ona wywoływana (w Setup). Albo po co w ogóle testować czy coś się wywołało? Nie lepiej sprawdzić wynik działania metody/wyrażenia???

komentarz 21 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)

Wyobraź sobie, że masz

mockSomeClass.Verify(mock => mock.launchNuclearRocket(), Times.Once());

Chcesz mieć pewność, że wystrzelisz jedną. Bez sprawdzenia ilości rakiet może być sytuacja, że test przejdzie, bo rakiety się po prostu skończą.

Użycie hiperboli jest tylko by pokazać słuszność. Nie jest to technicznie najlepszy sposób. 

komentarz 21 kwietnia 2020 przez dawid2002 Mądrala (5,190 p.)
No dobrze to ma sens. Tylko odwołując się do przykładu ze stacka zobacz, że w linii 15 sprawdzamy czy wywołano to wyrażenie lambda a w linii 9 widać, że te wyrażenie zostało użyte przecież. Więc po co to sprawdzać? Nie lepiej sprawdzić działanie metody myClass.MyMethod (bo chyba ona jest tutaj testowana)?
komentarz 21 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)

Oczywiście kod testowy powinien być prosty i czytelny, nie zawsze tak jest. Metoda .Verify sprawdza wywołanie, przypisanie innej metody. Przy bardziej rozbudowanym teście może się zdarzyć większa złożoność cyklometryczna, co na pewno utrudni czytelność i określenie na oko ilości wywołań metod.

https://dariuszwozniak.net/posts/kurs-tdd-16-zaawansowane-techniki-moq-argument-matching-verify-callback W mojej opinii przystępnie wytłumaczył zasadę obchodzenia się z weryfikacją wywołań. 

komentarz 21 kwietnia 2020 przez dawid2002 Mądrala (5,190 p.)
Czyli mówiąc w skrócie użycie tej metody zależy od przypadku. Dziękuje ci za pomoc!
komentarz 21 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)
Wszystko jest zależne. Taka natura programowania.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 14 grudnia 2018 w C# przez marcin99b Szeryf (81,660 p.)
0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 11 stycznia 2019 w C# przez adam1297 Użytkownik (630 p.)
+1 głos
1 odpowiedź 185 wizyt

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...