Столкновение имени метода OCMock

Я новый пользователь OCMock, поэтому, возможно, я просто пропустил что-то простое здесь. этот код не компилируется:

id mockSession = [OCMockObject mockForClass:[AVCaptureSession class]]; [[mockSession expect] addOutput:[OCMArg anyPointer]]; 

ошибка

 Multiple methods named 'addOutput:' found with mismatched result, parameter type or attributes 

подпись метода addOutput на AVCaptureSession выглядит следующим образом

 - (void)addOutput:(AVCaptureOutput *)output 

насколько я могу судить, проблема в том, что метод addOutput существует как на классах AVCaptureSession, так и на AVAssetReader. сигнатура метода для addOutput на AVAssetReader выглядит следующим образом.

 - (void)addOutput:(AVAssetReaderOutput *)output 

по-видимому, компилятор считает, что мой mockSession – это AVAssetReader, но я не знаю, почему он выбирает этот класс вместо AVCaptureSession. если я ожидаю другого метода в AVCaptureSession, которого нет в AVAssetReader, тогда он компилируется. я пробовал следующее без успеха. он компилируется, но падает.

 id mockSession = [OCMockObject mockForClass:[AVCaptureSession class]]; [(AVCaptureSession*)[mockSession expect] addOutput:[OCMArg anyPointer]]; 

этот код также не компилируется с той же ошибкой, что и предыдущая

 id mockSession = [OCMockObject mockForClass:[AVCaptureSession class]]; AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; [[mockSession expect] addOutput:output]; 

любое руководство здесь?

2 Solutions collect form web for “Столкновение имени метода OCMock”

В тех случаях, когда ваша переменная является «id», но метод объявляется с разными сигнатурами в разных классах, вы должны помочь компилятору, наведя объект на правильный тип, например

 [((AVCaptureSession *)[mockSession expect]) addOutput:[OCMArg any]]; 

В любом случае, если аргумент является объектом, как кажется в вашем случае, вы должны использовать любой, а не anyPointer . Но вы поняли, что это уже есть. 😉

хорошо, я думаю, он понял это. как я подозревал, это была простая ошибка noob. изменение [OCMArg anyPointer] на [OCMArg any] выполняет следующую работу:

 id mockSession = [OCMockObject mockForClass:[AVCaptureSession class]]; [(AVCaptureSession*)[mockSession expect] addOutput:[OCMArg any]]; 
  • «Класс X реализуется в обоих» при выполнении модульных тестов в проекте, использующем Cocoapods
  • Создание файлов .gcda после запуска модульных тестов на Xcode-боте
  • XCTest не связывает инфраструктуру iOS
  • Хороший тестовый бегун для тестов OCUnit / XCode
  • Дженкинс висит при запуске Xcode Unit Tests
  • Sporadic Crash Сброс постоянных хранилищ между блоками тестов (RestKit)
  • Издевательские объекты Cocoa с недоступными инициализаторами в модульных тестах
  • Тестирование модуля в Xcode, запускает ли это приложение?
  • Исключить тесты из xctool
  • Ошибка OCMock - ожидаемый метод не был вызван
  • XCode модульное тестирование
  • Interesting Posts

    Имеет ли приложение iOS доступ к записи внутри своего пакета?

    accessNotConfigured: URL-адрес URL-адреса Google для API-интерфейса iOS

    Приложение не в поиске в App Store

    UICollectionViewController покажет мне неправильный образ на мгновение, а затем обновит его вправо

    Получить высоту клавиатуры не работает на бета-версии IOS 11

    NSFetchRequest для вспомогательных объектов в строках

    затрагивает методы, не вызывающие UIView, размещенные внутри UIScrollView

    TTPhotoViewController получает текущее изображение центра?

    Как я могу имитировать приложение, убитое в фоновом режиме?

    Установите MPNowPlayingInfoCenter с другим фоновым звуком

    Реализация демонстрационной записи RoboVM с использованием AudioQueue приводит к ошибке «No @Marshaler found»

    Bundle.main.path (forResource: ofType: inDirectory :) возвращает nil

    Есть ли способ спроектировать Tinder / Twitter-подобный профилю заголовок с табличным представлением в iOS?

    MPMoviePlayerController MovieAccessLogEvent – Надутый наблюдаемый Битрейт

    Нажмите «Определить маркер», как получить название

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.