XcodeにGoogleToolboxfor Macをインストールし、ここにある単体テストを設定する手順に従いました。
それはすべてうまく機能し、すべてのオブジェクトで同期メソッドを完全にテストできます。ただし、実際にテストしたい複雑なAPIのほとんどは、デリゲートのメソッドを呼び出すことで非同期で結果を返します。たとえば、ファイルのダウンロードと更新システムを呼び出すとすぐに戻り、ファイルのダウンロードが終了すると-fileDownloadDidComplete:メソッドが実行されます。 。
これを単体テストとしてどのようにテストしますか?
testDownload関数、または少なくともテストフレームワークがfileDownloadDidComplete:メソッドの実行を「待機」したいと思うようです。
編集:XCode組み込みのXCTestシステムの使用に切り替えましたが、GithubのTVRSMonitorが、セマフォを使用して非同期操作が完了するのを待つ非常に簡単な方法を提供していることがわかりました。
例えば:
- (void)testLogin {
TRVSMonitor *monitor = [TRVSMonitor monitor];
__block NSString *theToken;
[[Server instance] loginWithUsername:@"foo" password:@"bar"
success:^(NSString *token) {
theToken = token;
[monitor signal];
}
failure:^(NSError *error) {
[monitor signal];
}];
[monitor wait];
XCTAssert(theToken, @"Getting token");
}