【问题标题】:Xcode 7 Tests don't run but reports successXcode 7 测试不运行但报告成功
【发布时间】:2015-12-25 19:24:04
【问题描述】:

我正在尝试将测试目标添加到我的项目中,但是当我运行测试时,似乎没有执行实际测试,而是 Xcode 总是报告成功,但小方块表示测试是否通过或不清楚。

我只有一个测试目标和一个类:

@implementation Tests

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    XCTAssert(false, "");
}

- (void)testPerformanceExample {
    XCTAssert(false, "");
}

@end

测试应该失败,但会显示一个弹出窗口说成功。此外,测试报告说没有测试。

如果我尝试单独运行测试,则测试“成功”,但我没有得到关于报告的任何信息,并且方块仍然是空的。

关于如何解决它的任何想法?

【问题讨论】:

  • 你解决了吗?我也遇到同样的问题
  • 对不起.. XCode 更新后它消失了
  • 我遇到了类似的问题:无法运行测试,没有报告任何内容,简短的平视显示器显示测试失败。重启设备修复它。

标签: unit-testing xcode7 xctest


【解决方案1】:

值得一提的是,Xcode 只运行以 'test' 开头的 XCTestCase 函数。这与其他平台相反,当我开始使用 Xcode 进行测试时,我感到很困惑。

这样做的原因是您可以在您的测试类中拥有一些方便实用的方法,您不一定想将其称为测试本身。

在下面的测试类中:

class MyBigTest: XCTestCase {

    func testSensibleInputReturnSensibleAnswer() {
        XCTAssert(/* stuff */)
    }

    func setupSomeKindOfData() {
        // does some data setup here
    }

}

只有testSensibleInputReturnSensibleAnswer() 会被测试套件调用。 setupSomeKindOfData() 函数可能有一些共享设置逻辑,许多测试函数都会调用这些逻辑。

此外,有些人喜欢用_s 格式化他们的测试方法名称,以使它们更具可读性。例如:test_sensibleAnswer_sensibleResult()

【讨论】:

    【解决方案2】:

    我在创建与现有 Swift 类同名的 Objective-C 测试 时遇到了这种情况。

    只需重命名一个测试文件

    【讨论】:

      【解决方案3】:

      我将测试方法标记为private,而为我解决的只是删除了private 访问修饰符。

      【讨论】:

      • 这是唯一对我有帮助的东西 - 谢谢!
      【解决方案4】:

      FWIW 我在使用 KIF 的 beforeAll 时也遇到了非常相似的问题。有时,beforeAll 中的代码不起作用,但测试仍会返回成功。

      它有时也会导致 Xcode 崩溃。请参阅 KIF 的 Github 页面 here。虽然有人指出问题可能不是因为 KIF,而是因为 XCTest 本身

      临时解决方案是避免使用beforeAll,而是使用beforeEach

      【讨论】:

        【解决方案5】:

        老问题,但在我的案例中解决了它的事情在这里提到了:

        您不能(总是?)重命名测试类/案例。创建一个新的类/案例并丢弃旧的。

        【讨论】:

          【解决方案6】:

          对于遇到此问题的其他人,请检查以确保您的测试类继承自 XCTestCase 而不是 XCTest。我疯狂地尝试所有这些解决方案,直到我意识到我从错误的类继承。 Xcode 不会抱怨,它只会说测试成功而不运行它们。希望这可以帮助某人。

          【讨论】:

          • 正确!我是从 XCTest 继承而来的,并且四处摸索到底出了什么问题。谢谢!
          • 这也是我的问题!非常感谢您发布这个答案!
          • 我无法理解为什么,幸运的是我遇到了这条评论!
          • 你是救生员!
          【解决方案7】:

          检查控制台(Command-Shift-Y)。

          在我的例子中,打印的输出表明了测试没有运行的原因。 (动态框架的飞行前检查失败。)但我没有看到它,因为调试区域已折叠。

          在我的情况下,问题也已通过将$(PROJECT_DIR)/Carthage/Build/iOS 添加到我的运行时搜索路径中得到解决,如here 所述

          【讨论】:

          • 也是我的问题。非常感谢。这出奇地难找。
          • 对我来说,问题是我忘记从测试模块中取消链接我之前删除的框架。感谢您提醒我控制台:D
          • +1 表示没有看到调试区域。它只是对我关闭,所以我只是假设那里没有什么可看的。
          【解决方案8】:

          我有同样的问题,清理构建文件夹可以解决它。但是,还有一种更快的方法是 Product -> Perform Action -> Test Without Building

          【讨论】:

            【解决方案9】:

            如果这是用于 UI 自动化测试,那么可能是因为您没有初始化应用程序并启动它。

            XCUIApplication *app = [[XCUIApplication alloc] init];
            [app launch];
            

            【讨论】:

              【解决方案10】:

              如果您正在为 iOS 构建,您通常会将 Xcode 设置为在物理设备上运行吗?如果是这样,请尝试将其设置为在 iOS 模拟器上运行。

              我发现,如果您在物理设备上设置了 Xcode 7,则单元测试的行为将与您描述的完全一样。将 Xcode 设置为临时在 iOS 模拟器上运行以进行单元测试可以立即解决问题,现在它就像一个魅力。

              我希望这可以帮助遇到同样问题的任何人。 :D

              【讨论】:

              • 所以你只需在模拟器上运行测试,通过,然后在设备上运行它就可以了?如果是这样,它仍然对我不起作用:/ 通常重置手机和/或 Xcode 和/或删除派生数据会有所帮助
              • @raistlin 是的,我就是这么做的。如果您在尝试了您提到的所有选项后仍然遇到问题,请尝试查看此question。用户 ReDetection 提到他必须从模拟器的菜单中“重置 iPhone 模拟器的内容和设置”,然后尝试我提到的。
              【解决方案11】:

              关闭 iOS 设备,然后重新打开电源。您可能还想移除 USB 电缆并重新连接,以便 Xcode 可以重新建立与设备的通信。当这发生在我身上时,测试会立即报告测试成功,而无需运行测试。我还注意到,当我尝试记录一个新的 UI 测试操作时,Xcode 每次都会崩溃 - 类似于我第一次启用 iOS 设置 - 开发人员 - 启用 UI 自动化设置之前的行为方式,我记得需要重启 iOS 设备启用此功能后,我尝试重新启动 iOS 设备,并且 Xcode 再次开始表现,我可以在我的 iOS 设备上成功记录和运行测试。完全披露:在重新启动 iOS 设备之前,我还打开和关闭了启用 UI 自动化,但我怀疑这是必需的。 -rrh

              【讨论】:

              • 实际启用 UI 自动化和重启设备对我有帮助
              猜你喜欢
              • 2015-06-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-02-19
              相关资源
              最近更新 更多