Cześć,
Piszę testy jednostkowe OCMock
i nie jestem w stanie zrozumieć, dlaczego następujący test kończy się niepowodzeniem. Próbuję przetestować tę metodę z klasy o nazwie MyOtherViewController
:
// private method of firstViewController
- (void)goToInitialViewController
{
// type of secondViewController is SecondViewController
[secondViewController showInitialViewController];
}
Oto test, który napisałem:
- (void)testShowInitialVCCalledWhenGoToInitialVCCalled
{
id secondVCMock = OCMClassMock([SecondViewController class]);
FirstViewController *firstVC = [FirstViewController new];
[firstVC goToInitialViewController];
OCMVerify([secondVCMock showInitialViewController]);
}
Próbuję też użyć OCMPartialMock([SecondViewController new])
ale test wciąż się nie powiedzie. Chyba brakuje mi czegoś dotyczącego drwin.
Każda pomoc byłaby mile widziana! Dzięki
Odpowiedzi:
1 dla odpowiedzi № 1secondViewController
jest rzeczywistym SecondViewController. Do testowania będziesz chciał wstrzyknąć zamiennik. Istnieje kilka różnych sposobów, ale dwa najczystsze to:
- Wtrysk konstruktora: Przekaż drugi kontroler widoku do inicjalizatora pierwszego kontrolera widoku. Kod produkcyjny przejdzie w SecondViewController. Kod testowy przejdzie w próbnym obiekcie.
- Zastrzyk nieruchomości: Ujawnij secondViewController jako właściwość. Kod produkcyjny może ustawić właściwość na SecondViewController przed zaprezentowaniem pierwszego kontrolera widoku. Kod testowy może ustawić go na próbny obiekt.
Aby uzyskać więcej informacji, zobacz Jak korzystać z wstrzykiwania zależności, aby umożliwić testowanie kodu