単純iOSユニットテスト-非同期テスト(XCTestExpectation)

1604 ワード

ユニットテストの非同期テストは、XCTestExpectationというクラスで実現する必要があります
関連メソッド
@interface XCTestCase (AsynchronousTesting)

- (XCTestExpectation *)expectationWithDescription:(NSString *)description;
@end

この方法はXCTestExpectationオブジェクトを生成し、ドキュメントに*@param description*This string will be displayed in the test log to help diagnose failuresと解釈するdescriptionパラメータを付与する.
つまり、このパラメータはテストログに印刷され、テスト者がテスト結果を表示しやすくなります.非同期動作時間が予め設定された時間を超えた場合にのみログに印刷されるため、タイムアウトエラーメッセージとしても理解できる.
@interface XCTestExpectation : NSObject 

- (void)fulfill;
@end

このメソッドは、この非同期テストが終了したことを示すために使用されます.各XCTestExpectationはfulfillに対応する必要があります.そうしないと、テストに失敗します.実際に使用するには、次の例を参照してください.
  • example:
  • - (void)testExpectation{
       XCTestExpectation* expect = [self expectationWithDescription:@"Oh, timeout!"];
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
            sleep(2); // 
            XCTAssert(YES,"Some Error Info");// 
            [expect fulfill];// 
        });
    
        [self waitForExpectationsWithTimeout:10 handler:^(NSError *error) {
          // 10 , (  fulfill ) 
          //Do something when time out
        }];
    }
    

    分析:1.このテストでは、expect 2というXCTestExpectationオブジェクトが作成されました.GCDを使用してグローバルキュー内で非同期アクションを開始します.このアクションの内容は次のとおりです.
  • は2秒遅延し、YESがYESであるか否かを判断し、非同期テスト終了
  • を通知するメッセージを送信する.
    3.waitForExpectationsWithTimeout:handler:で2つのことをしました
  • 非同期試験の時間長を設定し、時間を超えると試験エラーを報告し、予め設定するタイムアウトエラー情報
  • を印刷する.
  • タイムアウト発生時にblockを実行する方法
  • このテストの結果はSuccessのはずです
    ユニットテストのエントリー内容を理解するには、iOSユニットテスト(役割とエントリーアップ)に移動します.