iOS测试:有没有办法跳过测试?

scr*_*rrr 14 ios xctest swift

如果当前禁用该功能,我不想执行某些测试.有没有办法"跳过"测试(并在控制台上获得适当的反馈)?

像这样的东西:

func testSomething() {
  if !isEnabled(feature: Feature) {
    skip("Test skipped, feature \(feature.name) is currently disabled.")
  }

  // actual test code with assertions here, but not run if skip above called.
}
Run Code Online (Sandbox Code Playgroud)

San*_*man 34

您可以通过右键单击左侧编辑器托盘中的测试符号来禁用Xcode运行的XCTests.

在此输入图像描述

您将获得此菜单,您可以选择"禁用"选项.

在此输入图像描述

再次右键单击将允许您重新启用.此外,如user @ sethf的回答所述,您将在.xcscheme文件中看到当前已禁用测试的条目.

最后,我建议不要禁用测试并在xcscheme中提交禁用代码.测试意味着失败,而不是沉默,因为它们不方便.

  • 我觉得Xcode应该有一个语法来声明在代码中禁用测试,而不仅仅是通过xcscheme文件. (3认同)

Ili*_*rim 12

从 Xcode 11.4 开始,您将能够使用XCTSkipUnless(_:_:file:line:).

发行说明阅读,

XCTest 现在支持根据运行时条件动态跳过测试,例如仅在某些设备类型上运行或远程服务器可访问时才执行某些测试。当跳过测试时,Xcode 在测试导航器和测试报告中以不同的方式显示它,并突出显示跳过发生的代码行以及可选的用户描述。有关跳过测试的信息也包含在 .xcresult 中以供编程访问。

要跳过测试,请从测试方法或 setUp() 中调用新的 XCTSkip* 函数之一。例如:

func test_canAuthenticate() throws {
    try XCTSkipIf(AuthManager.canAccessServer == false, "Can't access server")

    // Perform test… 
}
Run Code Online (Sandbox Code Playgroud)

XCTSkipUnless( : :file:line:) API 类似于 XCTSkipIf( : :file:line:) 但如果提供的表达式为 false 而不是 true 则跳过,并且 XCTSkip API 可用于无条件跳过。(13696693)


Ale*_*loz 11

我在一篇文章中找到的另一种可能的解决方案:在跳过的测试前加上"skipped_"之类的内容

优点:

  • XCode不会将它们视为测试
  • 您可以使用搜索轻松找到它们
  • 您可以再次进行测试,将"skipped_"替换为""

  • 在我看来,这比通过 Xcode 禁用更容易发现,这使得禁用变得非常不可见。+1 (3认同)

小智 5

我找到了一种方法,通过修改我的 ui 测试 .xcscheme 文件并在 TestableReference 下添加一个名为 SkippedTests 的部分,然后添加带有“Identifier”属性的单个测试标签以及您的类和测试方法的名称。就像是:

<SkippedTests>
       <Test Identifier="ClassName/testMethodName" />
</SkippedTests>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Abh*_*man 5

从 Xcode 11.4+ 开始,您可以使用XCTSkipIf()XCTSkipUnless()

try XCTSkipIf(skip condition, "message")


try XCTSkipUnless(non-skip condition, "message")
Run Code Online (Sandbox Code Playgroud)

https://developer.apple.com/documentation/xctest/methods_for_skipping_tests#overview


Sul*_*han 1

不幸的是,没有内置的测试用例跳过。测试用例要么通过,要么失败。

这意味着您必须自己添加该功能 - 您可以通过类别添加一个功能XCTestCase(例如XCTestCase.skip),该类别会将信息打印到控制台中。但是,您必须return在其后添加一个以防止其他断言运行。