3

我有一个视图控制器,它在 viewDidLoad 期间将自己添加为 UIApplicationDidBecomeActiveNotification 的观察者。我想验证这是否发生,但我不希望测试关心视图控制器为事件注册的特定选择器。

目前我的测试看起来像这样:

- (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];
}

...但是为选择器传递“anything()”会导致编译器错误:“ARC 不允许将 Objective-C 指针隐式转换为 'SEL'”。

如果我通过“@selector(applicationDidBecomeActive:)”而不是任何东西,我可以使测试工作。那是视图控制器使用的确切选择器。但如果可能的话,我希望测试对具体实现没有太多了解。

4

1 回答 1

1

anything()仅适用于id来自OCHamcrestAPI)对象的selector状态和方法的状态。

我会在 GitHub 上提出问题,现在提供额外的测试知识并指定精确。

我认为这应该是很容易的贡献(因为提供精确的选择器正在为测试工作)

于 2014-04-01T16:09:35.793 回答