OCMock выбрасывает NSInternalInconsistencyException, когда параметры не соответствуют ожидаемым - PullRequest
1 голос
/ 06 мая 2011

Я устанавливаю фиктивный объект для объекта делегата, чтобы проверить, что, когда URL равен nil, метод делегата вызывается с nil в качестве параметров.

Когда FileDownloadOperation ведет себя как ожидалось,тестовый проход, что нормально.

Когда FileDownloadOperation не вызывает метод делегата, тест завершается неудачно, как и ожидалось.

Но когда FileDownloadOperation вызывает метод делегата счто-то другое, чем nil, вместо сбоя тест завершается сбоем, и никакие другие тесты не выполняются, потому что OCMock throws:

'NSInternalInconsistencyException' причина: 'OCMockObject [FileDownloadOperationTest]: неожиданный вызванный метод: data: <> forURL: nil

  -(void) testNilURL{
      // 1. Create an operation
      FileDownloadOperation * anOp = [[FileDownloadOperation alloc]init];
      // 2. set a nil URL
      anOp.URL = nil;
      // 3. set a mock delegate
      id mockDelegate = [OCMockObject mockForClass:[self class]];
      [[mockDelegate expect] data:[OCMArg isNil] forURL:[OCMArg isNil]];
      anOp.delegate = mockDelegate;
      // 4. launch operation
      [anOp main];
      // 5. ASSERT mock delegate is called with nil data
      STAssertNoThrow([mockDelegate verify], @"Delegate should be called with nil data and nil URL");
      [anOp release];
    }

Это ожидаемое поведение?или я что то не так делаю?спасибо!

1 Ответ

4 голосов
/ 07 мая 2011

OCMock генерирует исключения, чтобы сообщать о несоответствиях, доверяя OCUnit ловить и сообщать о любых исключениях.Но из-за ошибки в iOS Simulator , модульные тесты не могут перехватить исключения, и поэтому просто аварийно завершаются.

(В настоящее время я пишу новую инфраструктуру для моделирования, которая обходит эту проблемуне полагаясь на исключения.)

...