2013-12-12 3 views
1

Я новичок в OCMock, поэтому я, возможно, пропустил что-то простое, но моя проблема в том, что я не могу заглушить метод class на макет, который я создал. Вот как я устанавливаю вверх часть моего теста:Stubbing метод «класс» с OCMock

// Unit Test 
id mock = [OCMockObject mockForClass:[MySubClass class]]; 
[[[mock stub] andReturn:[MySubClass class]] class]; 
... 
[someObject someMethodWithParam:mock]; 
... 

Вот моя реализация someMethodWithParam::

// Implementation 
- (void)someMethodWithParam:(MySuperClass *)param { 
    [[param class] someClassMethod]; 
} 

Проблема заключается в том, что [param class] возвращает OCClassMockObject вместо MySubClass. Это приводит к ошибке «непризнанный селектор, отправленный в класс» при вызове someClassMethod. Я пытался использовать частичный макет, но это, похоже, не помогло.

Edit:

Вот упрощенный тест, который не пройдет:

// Unit Test 
id mock = [OCMockObject mockForClass:[MySubClass class]]; 
[[[mock stub] andReturn:[MySubClass class]] class]; 
XCTAssertEqual([mock class], [MySubClass class], @"The mock's class should be MySubClass"); 

ответ

0

Посмотрите на свой -someMethodWithParam:. Это ничего не возвращает. Это пусто. Так что это неправильный тест для этого метода. Вы сделали макет, который должен что-то вернуть, даже если метод не может вернуть ничего. Этот тест должен выглядит следующим образом:

MyClass object = [MyClass new]; /// instance of class which has someMethodWithParam: method 
id mock = [OCMockObject partialMockForObject:object]; 
[[mock expect] someClassMethod]; 

[mock someMethodWithParam:[OCMArg any]]; 
[mock verify]; 

В этом методе только то, что вы можете это тест ожидания. Вы можете проверить, вызван ли метод в вашем методе. Таким образом, вы можете проверить, был ли вызван метод -someMethodWithParam-someClassMethod. Это все. И вы должны создать частичный макет.

+1

OCMockObject + mockForClass: будет работать и здесь, чтобы сохранить создание экземпляра объекта, если ваш тест ему не нужен. – ImHuntingWabbits

Смежные вопросы