Использование OCMockito для макетирования пустых методов

При использовании OCMockito ниже прекрасно работает:

DSAPIManager *mockAPIManager = mock([DSAPIManager class]);
[given([mockAPIManager initWithBaseURL:[mockAPIManager baseURL]]) willReturn:[DSAPIManager sharedAPIManager]];

Однако, когда я пытаюсь сделать то же самое в методе с несколькими аргументами (см. Код ниже), я получаю "Аргумент типа" void "is notplete", ошибка компилятора.

DSAPIManager *mockAPIManager = mock([DSAPIManager class]);
[given([mockAPIManager setLoginCredentialsWithEmail:@""
                                           password:@""]) willReturn:@""];

Кто-нибудь знает правильный путь по этому поводу?

редактировать

Моим первоначальным намерением задать этот вопрос было решение проблемы с ошибкой компилятора при попытке выполнить следующее:

[given([mockAPIManager setLoginCredentialsWithEmail:@"" password:@""]) willDo:^id(NSInvocation *invocation) {
        // Mock implementation goes here
}];

Подпись метода, который я пытаюсь смоделировать:

- (void)setLoginCredentialsWithEmail:(NSString *)email password:(NSString *)password;

То, что я на самом деле пытаюсь сделать, это макет реализации void метод. (Учитывая void метод, макет реализации метода с блоком. Для моих целей метод возвращает блок завершения, который принимает два аргумента. Я хотел бы построить эти два аргумента, а затем запустить блок завершения внутри макетированного блока реализации.)

2 ответа

Решение

OCMockito пока не поддерживает создание пустых методов. Это потому что до willThrow: а также willDo: пришли, не было необходимости. Это будет добавлено как функция в ближайшее время. Вы можете отслеживать прогресс в https://github.com/jonreid/OCMockito/pull/93

Теперь вы можете использовать данный Void, как это

[givenVoid([mockAPIManager setLoginCredentialsWithEmail:@"" password:@""]) willDo:^id(NSInvocation *invocation) {
        // Mock implementation goes here
}];
Другие вопросы по тегам