2013-07-29 9 views
0

Я работаю над своими модульными тестами для программирования iOS, и у меня возникла небольшая проблема при попытке проверить мой основной класс, издеваясь над его дочерние классы с использованием OCMock, а затем видя, добавляет ли основной класс дочерние контроллеры (mockObjects [uiviewContoller]), а затем проверяет, что объект вызывает метод на каждом из дочерних контроллеров.Добавление контроллера корневого представления OCMockObject [UIViewController] как ошибка контроллера дочернего представления

Проблема в том, я постоянно получаю «тест не пройден„ добавив контроллер вида корневой OCMockObject [UIViewController] в детстве зрения контроллера“»

каждый раз, когда я запустить тест.

- (void)setUp 
{ 
    [super setUp]; 
    testMain = [[UIViewController alloc] init]; 
} 

- (void)tearDown 
{ 
    for (UIViewController *testCon in testMain.childViewControllers) { 
     [testCon removeFromParentViewController]; 
    } 
    testMain = nil; 
    [super tearDown]; 
} 

тест:

- (void) testDayNightTriggerTriggersAllSubviews{ 
    id mockTopController = [OCMockObject niceMockForClass:[UIViewController class]]; 
    id mockBottomController = [OCMockObject niceMockForClass:[UIViewController class]]; 
    id mockMainScreen = [OCMockObject niceMockForClass:[UIViewController class]]; 

    [[mockTopController expect] dayNightTrigger]; 
    [[mockBottomController expect] dayNightTrigger]; 
    [[mockMainScreen expect] dayNightTrigger]; 

    //trigger 

    [testMain dayNightTrigger:mockTopController bottom:mockBottomController main:mockMainScreen]; 

    [mockBottomController verify]; 
    [mockTopController verify]; 
    [mockMainScreen verify]; 

} 

метод для проверки:

//overload 
- (void) dayNightTrigger:(UIViewController *) top bottom:(UIViewController *)bottom main:(UIViewController *)main{ 
    self.bottomMenu = bottom; 
    self.topMenu = top; 
    self.mainScreen = main; 
    [self dayNightTrigger]; 
} 
- (void) dayNightTrigger{ 
    [self.app dayNightTrigger]; 

    [self.bottomMenu dayNightTrigger]; 
    [self.topMenu dayNightTrigger]; 
    [self.mainScreen dayNightTrigger]; 
} 

мне было интересно, если есть что-то не так с моей установки/демонтажа? или я делаю что-то не так с каркасом OCMock, но на самом деле, почему я продолжаю получать эту ошибку.

+0

Возможно, было бы полезно вставить фактическую трассировку. –

+0

Должны ли вы насмехаться над собой .app dayNightTrigger? –

ответ

3

Я столкнулся с той же проблемой. Я предполагаю, что ваши свойства bottomMenu, topMenu и mainScreen устанавливают нижнее, верхнее и основное в качестве контроллеров детского представления другого контроллера представления.

К сожалению, addChildViewController: имеет некоторое представление в структуре UIViewController *. Поскольку это прямой доступ к памяти, а не вызов метода, OCMockObject не может его перехватить. В результате объект-макет (иногда) рассматривается как корневой вид.

Так я нашел вокруг него было переопределить addChildViewController: на объекте я тестирование в тестовом файле и не это ничего не делать:

@implementation MyViewController (overwriteForTesting) 
- (void)addChildViewController:(UIViewController *)childController { 
} 
@end 

Это означает, что он не будет добавить контроллер представления в его список детей.

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

  • Нет связанных вопросов^_^