期待通りに動作する数々の非同期ユニットテストがあります。しかし、私がスーツですべてのテストを実行すると、彼らはお互いが完了するのを待たずに、次のテストの実行が開始されると非同期コールバックが保留されます。私が望むのは、各テストが前のテストでの期待を待ってから実行することです。これらのテストでは共有データベースが使用されるため、重複すると複雑さが増し、スイートとして実行するとテストが失敗します。XCodeで次の単体テストを開始する前にXCTestExpectationを待つ
- (void)testSignIn {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
XCTestExpectation *expectation =
[self expectationWithDescription:@"Expectations"];
[_userManager signInWithUsername:kUserEmail andPassword:kUserPassword
success:^{
XCTAssertNotNil([_userManager getCurrentUser]);
XCTAssertNotNil([_userManager getCurrentUser].plan);
XCTAssertTrue([_userManager getCurrentUser].plan.liveStream == TRUE);
[expectation fulfill];
} failure:^(EDApiError *apiError) {
XCTAssertTrue(FALSE); // Should not fail
[expectation fulfill];
}];
[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) {
if (error) {
NSLog(@"Timeout Error: %@", error);
}
}];
}
これは意味をなさない。いずれかの方法が期待を満たす必要がある次のテストを開始する前に、1つのテストが失敗/成功する必要があります。私が考えることができるのは、 'testSignIn'が単一のテストの2箇所から呼び出されることだけです。 1. 1回のテストで2回実行していないことを確認してください。 2.さらに5秒のタイムアウトは少し小さすぎます。私は少なくとも30秒間それを作ることをお勧めします。 – Honey
さまざまな記述文字列を持つ必要があるように見えます。私はすべての鉱山を同じ弦にセットしていたので、私が見ていた振る舞いを引き起こしたようです。 – deepwinter
(私の前のコメントを削除しました)私はそれを理解しようとしています。私はまだ2つのテストが同時に実行されていることを意味しません。だからこそ、私はこれが根本的な原因ではないと推測しています... – Honey