XCTest没有在Xcode 5中完成

时间:2013-09-24 20:17:49

标签: xcode5 xctest

我有一个测试类和一个测试用例。当我运行我的单元测试时,Xcode告诉我所有的测试都通过了,但是我发出警告说我的测试没有完成。

我是否必须使用XCTest做一些特别的事情让它知道我已经完成了特定的测试用例?

更新: 这可能是一个时间问题/错误。我放了一个[NSThread sleepForTimeInterval:.1];在tearDown方法中,现在它每次都有效。 Xcode也可以在没有睡眠的情况下定期完成测试。

更新2: 看起来像一些奇怪的Xcode错误,我添加了第三个测试,它正在进行文本格式化验证,警告再次出现。

Test Failure Image

3 个答案:

答案 0 :(得分:13)

我从来没有得到你提到的警告,但是在转换为Xcode 5 XCTest(带有重构菜单并自己交换框架)后,我的测试永远运行(对于永远的某些值......)但从未真正开始执行(setUp和完全没有调用的测试方法。

我改变了我的测试目标,Build Settings>包装>包装器从“octest”扩展到“xctest”,问题立即得到解决。

Wrapper Extension setting existing and new value

要回答您的问题,测试应在其执行完成并且其tearDown方法完成后立即完成。没有代码的测试将成功通过。尝试在测试中设置断点或日志消息以验证它是否实际被调用,并确保您的tearDown不会因任何原因而挂起。

答案 1 :(得分:0)

你的更新暗示睡在tearDown线程中解决它,如果你正在做类似网络或后台处理的事情,一个方便的技巧是设置一个标志并确保它被清除(如果没有则抛出错误)。清除响应代码中的标记。

下面的拆解和测试将计时器设置为两秒钟(好吧,它等待250毫秒八次)。

- (void)tearDown {
    [super tearDown];
    while (isProcessing > 0) {
        LogTrace(@"Polling...");
        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.25]];
        isProcessing--;
        if(isProcessing == 0) {
            XCTFail(@"Network loop expired while awaiting response");
        }
    }
    LogTrace(@"Finished Polling");
}

-(void)testARandomRequest {
    isProcessing = 8;

    NSDictionary *parameters = @{@"code": @"54321"};
    [manager doAFNetworkPatch:@"restApi/1" andParameters:parameters andPredicate:^(NSURLResponse *response, NSError *error) {
        NSLog(@"Response received");
        isProcessing = 0;
    }];
}

答案 2 :(得分:0)

当我尝试在iOS 6模拟器上运行时,我遇到了同样的问题。 确保您在iOS7模拟器上运行测试,而不是iOS6。 XCTest仅在iOS7之后可用。