Переверните вопрос: шаблон mtch Вы должен делать, "какой шаблон соответствует моей проблеме". Рассмотрите действительно простой шаблон, найдя элемент в массиве. в C это похоже на что-то
TYPE_t ary[SIZE] = // ... gets initialized somehow
size_t ix ; // Your index variable
for(ix=0; ix < SIZE; ix++){
if (ary[ix] == item) {
return ix ;
}
}
, Вы не смотрите на код и думаете, "где я могу использовать это", Вы смотрите на проблему и говорите, что "я знаю, как найти элемент в массиве?"
С более обширными шаблонами действительно работы тот же путь. У Вас должны быть много много копий структуры данных, которая часто не изменяется---, который заставляет Вас думать "Боксер наилегчайшего веса". Вы хотите что-то, что живет с обеих сторон границы сети, Вы думаете Прокси.
при изучении шаблонов, особенно GoF, спрашиваете себя, "какие ситуации призывают к этому шаблону? Я видел этот шаблон прежде? Для чего я, возможно, использовал это в предыдущей работе? Где я могу найти пример этого в моей собственной жизни?"
Похоже, ни andReturn
/ andReturnValue
/ andDo
не переопределяется при вызове несколько раз. Мой обходной путь - добавить свойство в тестовый класс и использовать его для контроля того, что должен возвращать макетируемый объект. Например, в случае свойства isAvailable
для макетируемого объекта мой код будет выглядеть так:
@interface MyTest: XCTestCase
@property BOOL stubbedIsAvailable;
@end
@implementation MyTest
- (void)setUp {
[OCMStub([myMockedObject isAvailable]) andDo:^(NSInvocation invocation) {
BOOL retVal = self.stubbedIsAvailable;
[invocation setReturnValue:&retVal];
}
}
- (void)testBehaviourWhenIsAvailable {
self.stubbedIsAvailable = YES;
// test the unit
}
- (void)testBehaviourWhenIsNotAvailable {
self.stubbedIsAvailable = NOT;
// test the unit
}