14

我正在查看 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 的内部以知道调用什么来进行测试运行吗?

4

4 回答 4

24

这是一个完整的示例,它适用于 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

这是它的样子:

在此处输入图像描述

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

于 2017-04-28T21:44:03.023 回答
13

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

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

于 2015-11-07T13:30:55.903 回答
5

Playground 目前不支持 XCTest。如果这是您想要的,我鼓励您在http://bugreport.apple.com上提交错误报告以请求它。

于 2014-08-07T03:10:43.517 回答
4

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

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

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

于 2017-01-27T12:23:42.570 回答