2016-06-30 3 views
0

Учитывая это простой классМожно ли проверить поведение внутри класса с OCMock

@implementation ExampleClass 

- (void)doStuff 
{ 
    [self doOtherStuff]; 
} 

- (void)doOtherStuff 
{ 
    // something happens here 
} 

@end 

это можно проверить поведение этого класса, что один из его собственных методов вызывает другую? например, в приведенном выше примере я могу использовать OCMock для проверки doOtherStuff? Я попытался следующие:

id mock = OCMClassMock([ExampleClass class]); 
[mock doStuff]; 
OCMVerify([mock doOtherStuff]); 

, но это не на самом деле вызвать вызов DoStuff на все из-за того, что это класс насмехаться. Возможно ли это только с частичным макетом - и если да, то каким альтернативным дизайном ExampleClass не нужен частичный макет? Медведь со мной - новичок в модульном тестировании и насмешливый здесь :)

ответ

1

Для этого нужны частичные издевательства. Создайте экземпляр ExampleClass, затем создайте частичный макет для этого экземпляра. Используя этот частичный макет, вы можете теперь проверить и/или заглушить методы в этом экземпляре, например. убедитесь, что вызывается doOtherStuff.

+0

Спасибо, имеет смысл. Вопрос, хотя - как это согласуется с представлением о том, что частичные издевательства являются «дьяволом»? Выполняет ли это внутриклассное тестирование плохую практику в мире тестирования модулей? Также любите свою библиотеку OCMock! – stonedauwg

+0

Ну, описанная выше методика представляет собой, в основном, вариацию [тестового шаблона подкласса] (http://xunitpatterns.com/Test-Specific%20Subclass.html). Он имеет свои применения, но многие люди считают дизайн, в котором эти два метода оказываются в разных классах выше. В этом случае вы можете заменить другой класс обычным макетом, обычно с инъекцией зависимости. –

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