/ / Metoda nie jest wywoływana z OCMClassMock - ios, testowanie jednostkowe, ocmock

Metoda nie jest wywoływana przy pomocy OCMClassMock - ios, unit-testing, ocmock

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 № 1

secondViewController jest rzeczywistym SecondViewController. Do testowania będziesz chciał wstrzyknąć zamiennik. Istnieje kilka różnych sposobów, ale dwa najczystsze to:

  1. Wtrysk konstruktora: Przekaż drugi kontroler widoku do inicjalizatora pierwszego kontrolera widoku. Kod produkcyjny przejdzie w SecondViewController. Kod testowy przejdzie w próbnym obiekcie.
  2. 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