0

そのため、簡単なテストをまとめて、audioController から周波数値を正しく受け取っていることを確認しようとしています。

私の見解では、ブロック コールバックを設定するために次のような呼び出しを行っています。

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

運がない。私が気付いていないブロックコンテキストで、いくつかの奇妙なインスタンスが進行中です。何が起こっているか知っている人はいますか?

4

1 に答える 1

0

決定的な回答を得るには、さらに詳細を提供する必要があります。たとえば、どのようにregisterVolumeCallback呼び出されますか? 独自のコードですかfrequencyCallback、それともサードパーティの API ですか?

あなたが提供したもので、それfrequencyCallbackは非同期呼び出しであると思われます。したがって、startAnimating最終的に呼び出される条件を作成する可能性がありますが、コールバックが呼び出される前に、すぐにモックを検証します。記述どおりにテストを実行するには、そのブロックが実行されるキューを理解し、実行する機会を与える必要があります。

メイン キューで非同期に呼び出された場合は、呼び出す前にメインの実行ループをスピンさせることができますverify

[self.testEqualizer startAnimating];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.1]];
[mockEqualizer verify];

別のキューで呼び出された場合、いくつかの異なるオプションがありますが、最初にコードがどのように構成されているかをより明確に把握するのに役立ちます.

于 2012-10-31T05:21:46.110 に答える