在XCtest类中使用覆盖init()?

时间:2015-10-21 15:51:39

标签: ios swift xctest

我想知道在XCtesting中是否有办法使用单位来指定在不同测试用例之间没有拆除的常量变量?我意识到,通常单元测试的最佳实践是尽可能保持测试的自包含,但在我目前的情况下,如果能够这样做并在测试用例之间保持一个恒定的变量,它将使测试执行得更快。 / p>

目前,我称之为

的任何类型的init函数
override init() {
    super.init()
}

给我一​​个EXC_BAD_INSTRUCTION错误。如果我不能在XCTestCase中使用init(),我还可以使用另一种解决方法吗?

2 个答案:

答案 0 :(得分:5)

尝试将变量移到XCTestCase类之外。

import XCTest

var counter = 0 // Note this is outside the class declaration

class MyTests: XCTestCase {
    override func setUp() {
        super.setUp()
        counter++
        print("Counter: \(counter)")
    }

    func testOne() {
        ...
    }

    func testTwo() {
        ...
    }

    func testThree() {
        ...
    }
}

这给出了这样的输出。

...
Counter: 1
...
Counter: 2
...
Counter: 3
...

答案 1 :(得分:-1)

您可以使用 setUptearDown方法来实现此目的。在第一个测试方法开始之前调用类setUp方法,并在所有测试方法完成后调用类tearDown方法一次。

我的理解是,这些仅用于处理您描述的测试范围的状态。 Apple上有一些good documentation

这种方法的优点是,如果不是单独的测试,状态至少保持在测试类的本地。