在XCtest类中使用重写init()?

hel*_*123 4 ios xctest swift

我想知道在进行XCtesting时是否有一种使用unit的方法,以便指定在各个测试用例之间不被分解的常量变量?我意识到一般而言,单元测试的最佳实践是保持测试尽可能独立,但是在我目前的情况下,如果我能够做到这一点并在测试用例之间保持恒定的变量,它将使测试执行得更快。

目前,我调用的任何类型的init函数

override init() {
    super.init()
}
Run Code Online (Sandbox Code Playgroud)

给我一个EXC_BAD_INSTRUCTION错误。如果我不能在XCTestCase中使用init(),是否可以使用其他解决方法?

Mik*_*ole 6

尝试将变量移出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() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这给出了这样的输出。

...
Counter: 1
...
Counter: 2
...
Counter: 3
...
Run Code Online (Sandbox Code Playgroud)


war*_*rdw 5

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

我的理解是,这些正是为了处理您所描述的测试范围状态。Apple 有一些很好的文档

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

  • @ZaporozhchenkoAleksandr 有两个单独的“setUp”方法,_实例方法_和_类方法_。_class_ `setUp` 仅在调用第一个测试之前调用一次,_class_ `tearDown` 仅在最后一个测试完成后调用一次。 (3认同)
  • /*! * @method -setUp * 在调用类中的每个测试方法之前调用的设置方法。*/ - (void)设置; (2认同)
  • 这应该是可接受的答案(而不是负分:() init() 覆盖对于 XCTestCase 来说似乎已被破坏,但类 setUp/tearDown 将正确执行相同的任务。您只需将您的思维与仅存在的每个案例保持一致作为一个实例,使用类(静态)变量而不是实例变量。 (2认同)