OCMockito - проверка порядка вызовов методов

Насколько я вижу, нет способа проверить порядок вызовов методов на макете.
Или я что-то упустил?

- (void)testResetCameraState_resetsCameraView
{
   // Arrange
   [given([_cameraManagerMock previewLayer]) willReturn:_testLayer];

   // Act
   [_cameraInteractor resetCameraState];

   // Assert
   [verifyCount(_cameraViewMock, times(1)) resetPreview];
   [verifyCount(_cameraViewMock, times(1)) setPreviewLayer:_testLayer];
}

В этом случае вы не можете проверить, что setPreviewLayer: называется после resetPreview,

1 ответ

Решение

Я думаю, что нашел решение.
Это основано на givenVoid метод, добавленный в этот запрос извлечения: https://github.com/jonreid/OCMockito/pull/93

К сожалению, он еще не объединен, поэтому вам нужно загрузить и собрать эту версию самостоятельно: https://github.com/lysannschlegel/OCMockito/tree/given_void

С помощью нового метода вы можете проверить порядок вызовов методов следующим образом:

- (void)testResetCameraState_resetsCameraView
{
    // Arrange
    [given([_cameraManagerMock previewLayer]) willReturn:_testLayer];
    [givenVoid([self->_cameraViewMock resetPreview]) willDo:^id (NSInvocation *invocation)
     {
         [(MKTBaseMockObject*)self->_cameraViewMock reset];
         return nil;
     }];

    // Act
    [_cameraInteractor resetCameraState];

    // Assert
    [verifyCount(_cameraViewMock, never()) resetPreview];
    [verifyCount(_cameraViewMock, times(1)) setPreviewLayer:_testLayer];
}

Это сбросит макет после первого вызова resetPreview,
Таким образом, мы можем проверить вещи после этого вызова:

  1. resetPreview никогда не вызывается после первого звонка.
  2. setPreviewLayer вызывается после resetPreview.

reset вызов также сбрасывает givenVoid() willDo: так секунда reset вызов не сбросит макет снова.

Надеюсь, это поможет, счастливое кодирование:D

Другие вопросы по тегам