Obecnie badam, jak skutecznie dodawać testy jednostkowe do ViewControllers mojej aplikacji. Do tej pory działało całkiem dobrze, dopóki nie próbowałem, że określony kontroler widoku prezentuje inny.OCMock i UIViewController
Używam OCMock i XCTest. Test jest następujący
id partialMock = OCMPartialMock([TestViewController class]);
[partialMock doSomeStuff];
OCMVerify([partialMock presentViewController:[OCMArg any] animated:[OCMArg any] completion:[OCMArg any]]);
Jak widać, chcę tylko, aby sprawdzić, presentViewController
został wezwany do testowanego kontrolera widoku wewnątrz doSomeStuff
funkcji. Zwróć uwagę, że podany przykład jest uproszczoną wersją tego, co aktualnie mam. Główną różnicą jest to, że sprawdzam, czy argumentem jest inny wyśmiewany obiekt.
Problem jest od doSomeStuff
metoda nie jest skrótowa, połączenie jest następnie przekazywane do rzeczywistej instancji TestViewController
, która następnie wywołuje presentViewController na sobie, a następnie nie odpala weryfikacji partialMock.
Czy jest coś, czego mi brakuje? Czy to naprawdę nie do zniesienia, co próbuję osiągnąć?
Hi Marca, mogę się mylić tutaj, ale ustawiania częściowej makiety na obiekcie klasy. Zazwyczaj w celu ustawienia zwykłego symulowanego obiektu używasz klasy, ale dla częściowego powinieneś ustawić ją z obiektu, który chcesz "szpiegować", w tym przypadku twój viewController –
Masz rację, w rzeczywistości mój uproszczony przykład nie jest całkiem w porządku. Ponieważ mam w rzeczywistości dwa kontrolery widoku, ale to sprawia, że coś wymyślam. –