Итак, я пытаюсь собрать простой тест, чтобы убедиться, что я правильно получаю значения частоты от своего аудиоконтроллера.
На мой взгляд, я делаю такой вызов, чтобы настроить обратный вызов блока:
- (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");
}
Где тестовый эквалайзер является экземпляром вышеупомянутого представления. Так что я пытаюсь сделать некоторые swizzling здесь. Проблема в том, что mockDidUpdateFrequency никогда не вызывается. Я попытался поставить:
self.currentFrequency = frequency;
за пределами блока, и swizzling действительно происходит, и я получаю вызов mockDidUpdateFrequency. Я также пробовал:
- (void) registerVolumeCallback {
__block UIEqualizer *blockSafeSelf = self;
NSNumberBlock frequencyCallback = ^(NSNumber *frequency) {
blockSafeSelf.currentFrequency = frequency;
};
self.audioController.frequency = frequencyCallback;
}
Не повезло. Здесь в контексте блока происходят какие-то странные вещи, о которых я не знаю. Кто-нибудь знает, что происходит?