xcodebuild 无法 运行 使用 XCTestExpectation 进行异步测试?
xcodebuild unable to run asynchronous tests using XCTestExpectation?
我有三个异步测试。在 Xcode 内测试时,所有 运行 都很好,但无法使用 xcodebuild 构建测试用例。我收到 11 个与 XCTestExpectation 相关的构建错误。
示例:
error: unknown type name 'XCTestExpectation' @property XCTestExpectation *expectationNoImage;
我正在使用最新的命令行工具 (Xcode 6.1.1)。 xcodebuild -version 正确指出。
我正在运行使用以下命令构建构建
xcodebuild -project myprojasync.xcodeproj -scheme testScheme -configuration Debug -sdk iphonesimulator7.1 clean test | ocunit2junit
如果我注释掉异步测试及其对应项,所有 运行 都可以完美地使用相同的命令。
编辑:这是其中一种测试方法。
@property XCTestExpectation *expectationPass;
-(void)testTaskPass{
//Expectation
self.expectationPass = [self expectationWithDescription:@"Testing Async Works"];
[self.asyncTask getInfo]; //asynchronous call
[self waitForExpectationsWithTimeout:5.0 handler:nil];
}
-(void)returnedFrom:(NSURL *)url with:(UIImage *)image{
if([[url absoluteString] isEqualToString: @"http://correcturl.com"]){
[self.expectationPass fulfill];
}
}
不清楚你什么时候达到预期。我看到你有:
-(void)returnedFrom:(NSURL *)url with:(UIImage *)image;
那里有一个fulfill,但是你调用它的时候我不清楚。
我会这样做:
@property XCTestExpectation *expectationPass;
-(void)testTaskPass{
//Expectation
self.expectationPass = [self expectationWithDescription:@"Testing Async Works"];
//asynchronous call
[self.asyncTask getInfo:^(){
// some Assertions here...
[self.expectationPass fulfill];
}];
[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error){
XCTAssertNil(error, "Error");
}];
}
事实证明,问题实际上是我在 XCode 中拥有 6.1 工具。我的计算机上仍然有旧工具,无论出于何种原因,即使我的 xcode-select 指向正确的工具,它仍在尝试使用旧工具。卸载了旧工具,现在一切正常:)
我有三个异步测试。在 Xcode 内测试时,所有 运行 都很好,但无法使用 xcodebuild 构建测试用例。我收到 11 个与 XCTestExpectation 相关的构建错误。
示例:
error: unknown type name 'XCTestExpectation' @property XCTestExpectation *expectationNoImage;
我正在使用最新的命令行工具 (Xcode 6.1.1)。 xcodebuild -version 正确指出。
我正在运行使用以下命令构建构建
xcodebuild -project myprojasync.xcodeproj -scheme testScheme -configuration Debug -sdk iphonesimulator7.1 clean test | ocunit2junit
如果我注释掉异步测试及其对应项,所有 运行 都可以完美地使用相同的命令。
编辑:这是其中一种测试方法。
@property XCTestExpectation *expectationPass;
-(void)testTaskPass{
//Expectation
self.expectationPass = [self expectationWithDescription:@"Testing Async Works"];
[self.asyncTask getInfo]; //asynchronous call
[self waitForExpectationsWithTimeout:5.0 handler:nil];
}
-(void)returnedFrom:(NSURL *)url with:(UIImage *)image{
if([[url absoluteString] isEqualToString: @"http://correcturl.com"]){
[self.expectationPass fulfill];
}
}
不清楚你什么时候达到预期。我看到你有:
-(void)returnedFrom:(NSURL *)url with:(UIImage *)image;
那里有一个fulfill,但是你调用它的时候我不清楚。
我会这样做:
@property XCTestExpectation *expectationPass;
-(void)testTaskPass{
//Expectation
self.expectationPass = [self expectationWithDescription:@"Testing Async Works"];
//asynchronous call
[self.asyncTask getInfo:^(){
// some Assertions here...
[self.expectationPass fulfill];
}];
[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error){
XCTAssertNil(error, "Error");
}];
}
事实证明,问题实际上是我在 XCode 中拥有 6.1 工具。我的计算机上仍然有旧工具,无论出于何种原因,即使我的 xcode-select 指向正确的工具,它仍在尝试使用旧工具。卸载了旧工具,现在一切正常:)