我有许多异步单元测试可以根据自己的期望正确工作。但是,当我在诉讼中运行所有测试时,他们不会等待其他人完成 - 异步回调在下次测试开始运行时仍处于等待状态。我想要的是每次测试都要在运行前等待前一次测试中的预期。这些测试使用共享数据库,因此让它们重叠会导致烦人的额外复杂性,并在作为套件运行时出现测试失败。在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);
}
}];
}
这没有任何意义,一次测试在开始下一次测试之前应该失败/成功,这两种方法都必须满足期望。我能想到的唯一的事情就是从单个测试的2个地方调用'testSignIn'。所以请确保你没有从一次测试中运行两次。 2.另外5秒超时有点太少。我会建议至少30秒。 – Honey
看起来像期望需要有不同的描述字符串。我把所有的我都设置为相同的字符串,这似乎导致了我所看到的行为。 – deepwinter
(删除了我以前的评论)我试图理解这一点。我的意思是仍然没有2个测试同时运行。所以,尽管这有效,但我猜这不是根本原因... – Honey