所以我试图组合一个简单的测试来验证我是否正确地从我的音频控制器接收频率值。
在我看来,我正在拨打这样的电话来设置块回调:
- (void) registerVolumeCallback {
      NSNumberBlock frequencyCallback = ^(NSNumber *frequency) {
          self.currentFrequency = frequency;
      };
      self.audioController.frequencyCallback = frequencyCallback;
  }
在我的音频控制器中,使用包含频率的 nsnumber 调用频率回调块。
在我的测试文件中,我有以下内容:
    - (void) testFrequencyAudioServiceCallbackActive {
          OCMockObject *mockEqualizer = [OCMockObject partialMockForObject:self.testEqualizer];
          [[[mockEqualizer stub] andCall:@selector(mockDidUpdateFrequency:)
                      onObject:self] setCurrentFrequency:[OCMArg any]];
          [self.testEqualizer startAnimating];
          [ mockEqualizer verify];
    }
和:
   - (void) mockDidUpdateFrequency: (NSNumber *) frequency {
        GHAssertTrue((frequency!= nil), @"Audio Service is messing up");
  }
其中测试均衡器是上述视图的一个实例。所以我想在这里做一些调酒。问题是,永远不会调用 mockDidUpdateFrequency。我试着把:
 self.currentFrequency = frequency;
在块之外,确实发生了混乱,我确实接到了 mockDidUpdateFrequency 的电话。我也试过:
 - (void) registerVolumeCallback {
     __block UIEqualizer *blockSafeSelf = self;
     NSNumberBlock frequencyCallback = ^(NSNumber *frequency) {
       blockSafeSelf.currentFrequency = frequency;
     };
    self.audioController.frequency = frequencyCallback;
}
没运气。在我不知道的块上下文中,这里发生了一些奇怪的实例。有谁知道发生了什么?