2014-03-21 1 views
3

У меня есть контроллер представления, который добавляет себя в качестве наблюдателя UIApplicationDidBecomeActiveNotification во время viewDidLoad. Я хотел бы проверить, что это происходит, но я не хочу, чтобы тест заботился о том, какой конкретный селектор контролирует контроллер просмотра для события.Использование OCMockito, как можно проверить, что какой-либо селектор был передан методу

В настоящее время мой тест выглядит примерно так:

- (void)testRegistersForApplicationDidBecomeActiveEvent 
{ 
    //given 
    MyViewController *sut = [MyViewController new]; 
    NSNotificationCenter* mockNotificationCenter = mock([NSNotificationCenter class); 

    //when 
    [sut view]; 

    //then 
    [verify([mockNotificationCenter]) addObserver:sut 
             selector:anything() 
              name:UIApplicationDidBecomeActiveNotification 
              object:nil]; 
} 

... но проходит «ничего()» для выбора дает ошибку компилятора: «неявное преобразование указателя Objective-C к„SEL“ запрещен АРК ».

Я могу выполнить тестовую работу, если я передам «@selector (applicationDidBecomeActive :)» вместо всего. Это точный селектор, который использует контроллер вида. Но я бы предпочел, чтобы тест, по возможности, не обладал такими знаниями о конкретной реализации.

ответ

1

anything() применим только для id (from the OCHamcrest API), который указывает на объект, а selector указывает на способ.

Я бы поднял вопрос о GitHub и прямо сейчас предоставил дополнительные знания в тесте с указанием точного.

Я думаю, что это должен быть очень легкий вклад (поскольку предоставление точного селектора работает для теста)