• 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?

42 Warsaw Coding Academy
0 głosów
635 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,020 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,020 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,020 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 112 wizyt
pytanie zadane 14 grudnia 2018 w C# przez marcin99b Szeryf (84,230 p.)
0 głosów
0 odpowiedzi 118 wizyt
pytanie zadane 11 stycznia 2019 w C# przez adam1297 Użytkownik (630 p.)
+1 głos
1 odpowiedź 232 wizyt

93,389 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,749 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...