xcodebuild 无法使用 XCTestExpectation 运行异步测试?

Posted

技术标签:

【中文标题】xcodebuild 无法使用 XCTestExpectation 运行异步测试?【英文标题】:xcodebuild unable to run asynchronous tests using XCTestExpectation? 【发布时间】:2015-02-25 15:27:38 【问题描述】:

我有三个异步测试。在 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];
    


【问题讨论】:

你好,请把测试方法放在这里,这样会更容易看到发生了什么...tkx 【参考方案1】:

目前尚不清楚您何时实现了期望。我看到你有:

-(void)returnedFrom:(NSURL *)url with:(UIImage *)image;

那里有一个完成,但当你调用它时我不清楚。

我会这样做:

@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");
   ];

【讨论】:

【参考方案2】:

事实证明,问题实际上是当我在 XCode 中拥有 6.1 工具时。我的计算机上仍有旧工具,无论出于何种原因,即使我的 xcode-select 指向正确的工具,它仍在尝试使用旧工具。卸载了旧工具,现在一切正常:)

【讨论】:

以上是关于xcodebuild 无法使用 XCTestExpectation 运行异步测试?的主要内容,如果未能解决你的问题,请参考以下文章

xcodebuild 命令无法生成 iPA

xcodebuild -create-framework 错误:无法读取文件

Swift:Jazzy 无法运行 xcodebuild

无法在安装了命令行工具的 Mavericks 上使用 xcodebuild

xcodebuild 命令无法与动态可可触摸框架一起正常工作

Xcodebuild-由于代码签名错误,Travis CI 无法归档使用 cocoapods 的项目?