Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在XCtest类中使用override init()?_Ios_Swift_Xctest - Fatal编程技术网

Ios 在XCtest类中使用override init()?

Ios 在XCtest类中使用override init()?,ios,swift,xctest,Ios,Swift,Xctest,我想知道是否有一种方法可以在测试时使用unit来指定一个常量变量,而这个常量变量不会在不同的测试用例之间被分解?我意识到,一般来说,单元测试的最佳实践是尽可能地保持测试的自包含性,但在我目前的情况下,如果我能够做到这一点并在测试用例之间保持一个恒定的变量,那么它将使测试执行得更快 目前,我调用的任何类型的init函数 override init() { super.init() } 给我留下了一个EXC\u BAD\u指令错误。如果我不能在XCTestCase中使用init(),是否还

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

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

override init() {
    super.init()
}

给我留下了一个EXC\u BAD\u指令错误。如果我不能在XCTestCase中使用init(),是否还有其他解决方法可以使用?

尝试将变量移到
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
...
您可以使用class
setUp
tearDown
方法来实现此目的。在第一个测试方法开始之前调用一次class
setUp
方法,在所有测试方法完成之后调用一次class
tearDown
方法

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


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

答案很简单。我从没想过要那样做。谢谢@HelloWorld345123123很高兴它有帮助!如果这解决了你的问题,你能把答案标记为正确吗?不要用一行定义来回答任何问题;由于Swift没有静态初始化块,因此不可能以这种方式进行更复杂的静态设置。/*!*@方法-在调用类中的每个测试方法之前调用setUp*setUp方法。*/-(无效)设置@ZaporozhchenkoAleksandr有两个独立的
setUp
方法,实例方法和类方法。类
setUp
在调用第一个测试之前只调用一次,而类
tearDown
在最后一个测试完成之后只调用一次。究竟为什么这个评论被否决了?这似乎是正确的答案@沃德:不过我有点麻烦。我已重写了类设置方法,但遇到一个编译器错误,表示它无法访问实例成员…@Luke您将希望访问实例
setUp()
以访问实例成员。在每次测试之间设置/删除实例成员。使用类
setUp()
为未在各个实例之间拆下的类设置初始状态。类方法无法访问实例成员,只能访问类本身的成员。这应该是可接受的答案(而不是负值:()init()XCTestCase的覆盖似乎被破坏,但类设置/拆卸将正确执行相同的任务。您只需将您的想法与每个案例(仅作为一个实例存在)相一致,使用类(静态)变量而不是实例变量。