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 指向正确的工具,它仍在尝试使用旧工具。卸载了旧工具,现在一切正常:)