2016-08-31 3 views
2

サブシステムが初期化されるのを待つために単体テストが必要ですが、通常は数秒かかります。これを待つために、私はこの問題は、この技術を用いて、あるテストXCTestですべての単体テストの実行を遅らせる

- (void)testReverseActionWithOffset 
{ 
    XCTestExpectation *expectation = [self expectationWithDescription:@"High Expectations"]; 

    // Wait for proper initialization of Realm and CrimsonObject system... 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 

で次の操作を行うことができ、私はすべての単一の試験方法で、この待機を行う必要があります。これは、システムが起動した後でも、各テストの間に2秒の遅延があることにつながります。テストメソッドは未定義の順序で実行されるため、遅延を1つのメソッドに入れることはできません。これをXCTestで処理する正しい方法は何ですか?

答えて

2

未定の順序で実行した試験方法は、私はちょうど1つの方法では、すべてのテストが-setUpのいずれかで行うことができますの間で行われる必要がある

何でも遅延を置くことができないのでまたは-tearDown

XCTestCaseごとに何か処理が必要な場合は、クラスメソッド+setUpまたは+tearDownのいずれかを使用できます。最初のテストは実行される前に実行され、後者はすべてのテストの後に実行されます。

あなたは実行ループを回転させることにより、これらのいずれかの方法で非ブロック待機を行うことができます。

+ (void)setUp 
{ 
    while(/* subsystems not ready */){ 
     [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 
    } 
} 
+1

問題は、私の知る限り、私のテストで見ることができるよう、使用して遅延する方法はありませんでした、ですこれらの方法。期待は効果がないようで、sleep()をフラットにするとメインスレッドが遅れてロードが初期化されないようにします(これは最初に待っていたものです)。これを回避する方法が分かっている場合は、教えてください。ありがとう! – David

+1

ノンブロッキング待ちをするには、条件が満たされるまで実行ループを回転させることができます: 'while(/ *サブシステムは準備できない* /){ [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; }「私はあなたの問題を解決することを犠牲にしてあなたの質問に答えていると感じるのを助けることはできません。本当の正解が何であるかはまだ分かりません。 –

+0

スレッド内からメインスレッドを続けることができないことに気付かなかった!これは素晴らしいです。これを答えに加えることができますか?私は同意しますか? +(ボイド)のセットアップ {ながら() {[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.1f]。 } } – David

関連する問題