【问题标题】:Using override init() in an XCtest class?在 XCtest 类中使用 override init()?
【发布时间】:2016-01-20 17:10:24
【问题描述】:

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

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

override init() {
    super.init()
}

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

【问题讨论】:

    标签: ios swift xctest


    【解决方案1】:

    尝试将变量移到 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
    ...
    

    【讨论】:

    • 简单的答案。从来没有想过这样做。谢谢!
    • @helloworld345123123123 很高兴它有帮助!如果这解决了您的问题,您能否将答案标记为正确?
    • 不通过一行定义回答任何问题;由于 Swift 没有静态初始化块,因此无法通过这种方式进行更复杂的静态设置。
    【解决方案2】:

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

    我的理解是,这些正是为了处理您描述的那种测试范围的状态。苹果上面有一些good documentation

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

    【讨论】:

    • /*! * @method -setUp * 在调用类中的每个测试方法之前调用的设置方法。 */ - (void)setUp;
    • @ZaporozhchenkoAleksandr 有两个独立的setUp 方法,实例方法类方法class setUp 在调用第一个测试之前只调用一次,而 class tearDown 在最后一个测试完成后只调用一次。
    • 为什么这条评论被否决了?这似乎是正确的答案。 @wardw 不过,我遇到了麻烦。我已经覆盖了类的 setUp 方法,但是得到一个编译器错误,说它无法访问实例成员...
    • @Luke 您需要访问 instance setUp() 以访问实例成员。在每次测试之间设置/拆除实例成员。使用 class setUp() 为不会在各个实例之间拆除的类设置初始状态。类方法不能访问实例成员,只能访问类本身的成员。
    • 这应该是公认的答案(而不是负分 :( ) init() 覆盖似乎被 XCTestCase 破坏了,但类 setUp/tearDown 将正确执行相同的任务。你只需要对齐您对每种情况的想法仅作为一个实例存在,请使用类(静态)变量而不是实例变量。
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    相关资源
    最近更新 更多