【问题标题】:How do you call XCTest in a Swift Playground?如何在 Swift Playground 中调用 XCTest?
【发布时间】:2014-09-22 22:35:19
【问题描述】:

我正在查看 Bendyworks 关于使用 Swift 进行单元测试的文章:http://bendyworks.com/unit-testing-in-swift/

就像你对 Swift 所做的那样,我把代码扔到 Playground 中去戳它。

import Cocoa

class Firewood {
    var charred: Bool
    init()  {
        println("initializing our firewood")
        charred = false
    }
    func burn() {
        charred = true
    }
}

import XCTest
class SimpleFirewoodTests: XCTestCase {
    func testBurningActuallyChars() {
        let firewood = Firewood()
        firewood.burn()
        assert(firewood.charred, "should be charred after burning")
    }
}

但是当然你也不能按下测试按钮 Playground 是一个连续的 REPL,所以你需要知道如何调用测试,有人知道 XCTest 的内部以知道调用什么来进行测试运行吗?

【问题讨论】:

  • 只是做一个项目......游乐场并不适合一切
  • 波什。没有单元测试意味着游乐场是测试驱动开发的禁区,这将是一大难题。我期待能够在操场上编写测试。

标签: swift xctest swift-playground


【解决方案1】:

游乐场目前不支持 XCTest。如果这是您想要的,我建议您在 http://bugreport.apple.com 提交错误报告以提出请求。

【讨论】:

  • 雷达归档: Swift Playgrounds:“import XCTest”给出“无法加载 'XCTest' 的底层模块”
  • 从 Xcode 8 开始,Swift 3.0.1,@Stuart Sharpe 的 answer 在 iOS 操场上工作。
【解决方案2】:

我刚刚写了一篇博文,解释了如何在 Xcode 7 中执行此操作,以及一个运行单元测试的示例 Playground。简短的回答是,您可以在操场内创建一个小型测试运行器对象,该对象运行测试并报告结果。除了观察失败的测试之外,您还可以通过 Playground 获得非常好的 TDD 设置。

http://initwithstyle.net/2015/11/tdd-in-swift-playgrounds/ https://github.com/sshrpe/TDDSwiftPlayground

【讨论】:

  • 我查看了你的仓库,可以确认这很好用!但是,如果我创建一个新 Playground 并手动导入您的样板代码,我会收到以下错误: Playground execution failed: /var/folders/r1/n32p3rzd07l50rnj6vjny6zd06mc_r/T/./lldb/516/playground63.swift:1: 8:错误:无法加载“XCTest”导入 XCTest 的底层模块 - 我缺少任何东西,或者与游乐场初始化有关的特殊内容?
  • 我发现了这个原因:我错过了一些东西,似乎这种导入 XCTest 的方法只适用于 Mac OS X Playgrounds,不适用于 iOS。在 iOS 游乐场 XCTest 无法导入(如果有人能弄清楚为什么会很棒的话)。
【解决方案3】:

现在可以通过在测试类的 defaultTestSuite 上调用 run() 在 Playground 中运行测试:

let testSuite = SimpleFirewoodTests.defaultTestSuite()
testSuite.run()

注意:测试中的断言应替换为 XCTAssertEqual。

【讨论】:

    【解决方案4】:

    这是一个完整的例子,它适用于 Swift 3+,它向你展示了如何做到这一点。这很好,因为现在您可以使用 XCTAssert,然后一旦您解决了问题,它们就可以轻松地直接移动到您的真实测试包中。 导入 XCTest

    class MyTestCase: XCTestCase {
    
       func testExample() {
           print("Test1")
           XCTAssertTrue(true)
       }
    
       func testAnother() {
           print("Test2")
           XCTAssertFalse(false)
       }
    }
    
    MyTestCase.defaultTestSuite().run() // Swift 3
    MyTestCase.defaultTestSuite.run() // Swift 4
    

    这就是它的样子:

    不幸的是,您必须打开日志窗口才能查看它是通过还是失败。如果你能看到彩色的测试结果就好了……

    【讨论】:

    • 谢谢!从 Swift 4 开始,defaultTestSuite 是一个属性,之后不带括号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多