27

我已经看到有人在这里和其他地方发布过这个问题,但我还没有找到任何可行的解决方案。我正在使用 XCode 4.4 并设置了一堆单元测试。我以前在这个项目上运行过它们,所以我知道如果它们实际运行,它们确实会通过/失败。

我有大约 15 个测试套件,每个套件包含 1-7 个测试。在大多数尝试中,除了 1 (FooTests) 之外,所有测试套件都完成(并通过)。它给出了警告:

FooTests did not finish
    testFoo did not finish

XCode 将报告测试成功,无论未完成的测试发生什么。还有一点需要注意,有时是不同的测试无法完成,有时多个套件无法完成。我没有注意到所有测试都完成的情况,但从这种看似随机的行为来看,我相信这是可能的。

那么,这是 XCode 中的错误吗?我想不出任何其他原因导致随机测试未完成,然后导致 XCode 报告一切都成功。有什么解决办法吗?

4

7 回答 7

17

我在 XCode 4.5.2 上。对于应用程序单元测试,如果您的测试套件完成得太快以至于在此之前没有正确加载主应用程序,您将收到警告。您可以通过在测试结束时添加睡眠来简单地避免该问题,如下所示。逻辑单元测试不会发生这种情况。

 [NSThread sleepForTimeInterval:1.0];
于 2012-12-19T03:45:17.387 回答
4

我正在使用 XCode46-DP3,我刚刚在测试中解决了这个问题。我有几个测试启动一个 Web 服务器,然后对其执行 http 调用;在测试结束时,Web 服务器停止。在上周,这些测试开始出现“未完成”的警告。对我来说,在这些测试结束时添加以下 sleep 就足够了(确切地说,我已经在 tearDown 中添加了它):

- (void)tearDown {
  [self.httpServer stop];
  [NSThread sleepForTimeInterval:1.0];
  self.httpServer = nil;
  self.urlComposer = nil;
}
于 2012-12-17T10:02:20.557 回答
4

我刚刚遇到了 XC4.5DP4 的这个问题。

我有一个测试,它在循环中做了一些工作,当它退出循环时什么都不做,我得到了“没有完成”错误。

为了证明测试已经完成,我将其添加为最后一行:

NSLog(@"done");

不仅“完成”被打印到输出 - 现在 Xcode 说测试已经完成。

似乎是一种解决方法...去图。

于 2012-09-12T10:21:18.147 回答
3

问题似乎是您的测试终止太快,以至于 Xcode 无法接收和解析指示失败或成功的日志消息。在最后一个测试用例运行中睡眠 1 秒对我来说可靠,而 0.0 则没有。要查看哪个测试用例是最后一个测试用例,请检查“方案”对话框中的测试操作。

我用一个方法创建了一个单独的 WorkaroundForTestsFinishingTooFast 测试用例:

- (void)testThatMakesSureWeDontFinishTooFast
{
    [NSThread sleepForTimeInterval:1.0];
}

问题是当您添加更多测试用例时,您必须确保此测试是最后运行的方法。这意味着从 Test 操作中删除和添加此类,因为不允许重新排序测试用例。另一方面,您只是将整个测试包延迟了 1 秒。

于 2013-05-14T02:02:24.467 回答
2

我在日志导航器中有同样的警告。我为我修好了。

在我的项目中,我有 2 个方案,一个用于运行项目,一个用于单元测试。

  1. 转到产品-> 编辑方案...
  2. 在方案选择器中选择 UnitTest 方案
  3. 选择左侧的“测试”图标
  4. 将调试器从 LLDB 更改为 GDB,然后按 OK
  5. 测试现在应该完成。(对我来说效果很好)
于 2012-09-21T13:57:49.663 回答
2

对我来说,解决方案是减少测试正在测试的应用程序部分的日志输出。我认为 xcode 无法及时解析测试输出,因为我在整个应用程序中都有其他输出。

于 2013-05-30T21:46:08.653 回答
0

我在使用 XCode 4.6 运行时遇到了同样的问题,就我而言,其原因是该方案与测试服中的实际单元测试之间存在不一致。在该计划中,我检查了一些套装,但在他们的 .m 文件中对一些单元测试进行了评论。

解决问题:取消注释测试或取消选择方案中的文件/诉讼,所有应再次变为绿色:)

对于像我这样忘记如何获得该计划的人来说,这些是必需的步骤:

  1. 右键单击方案部分中的项目名称(停止按钮右侧)
  2. 选择编辑方案
  3. 选择测试调试
  4. 单击单元测试项目旁边的三角形,每个文件旁边都有一个复选框
  5. 取消选中您在注释中放置单元测试的文件

希望这可以帮助

于 2013-03-14T02:09:37.060 回答