2016-02-18 6 views
1

Привет,Как проверить, является ли конкретный метод называется

Я пишу тесты для моего приложения, и мне интересно, если я могу проверить, если конкретный метод.

Например, предположим, что я хочу, чтобы проверить, что при вызове следующий dismiss метод, метод reallyDismiss также называют:

- (void)dismiss 
{ 
    [self reallyDismiss]; 
} 

Есть ли что-то вроде:

- (void)testReallyDismissIsCalledWhenDismissIsCalled 
{ 
    [self.viewController dismiss]; 
    XCTAssertMethodHasBeenCalled(@"reallyDismiss"); 
} 

?

ответ

1

Не сразу, нет. Вы обычно использовали бы насмешливую библиотеку, чтобы ввести свою собственную версию этого метода, чтобы вы могли добавить ожидание того, что оно вызвано или подклассифицирует целевой класс, чтобы подкласс мог перехватить (и, если необходимо, переслать) вызов метода, который вы проверяете ,

+0

Хорошо спасибо, я сделаю это – Randy

0

Вы можете реорганизовать свой код, как

-(BOOL)dismiss { 
    if someCondition { 
     [self reallyDismiss]; 
     return YES; 
    } else { 
     return NO; 
    } 
} 

- (void)testReallyDismissIsCalledWhenDismissIsCalled 
{ 
    XCTAssertTrue([self.viewController dismiss], @"reallyDismiss"); 
} 
+0

ваш тест вызывает метод дважды, и это может привести к недействительности логики, это также означает добавление некоторой логики, чтобы проверить, что вы можете проверить эту логику ... – Wain

+0

Обновлен ответ –

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