Ios 在XCtest类中使用override init()?
我想知道是否有一种方法可以在测试时使用unit来指定一个常量变量,而这个常量变量不会在不同的测试用例之间被分解?我意识到,一般来说,单元测试的最佳实践是尽可能地保持测试的自包含性,但在我目前的情况下,如果我能够做到这一点并在测试用例之间保持一个恒定的变量,那么它将使测试执行得更快 目前,我调用的任何类型的init函数Ios 在XCtest类中使用override init()?,ios,swift,xctest,Ios,Swift,Xctest,我想知道是否有一种方法可以在测试时使用unit来指定一个常量变量,而这个常量变量不会在不同的测试用例之间被分解?我意识到,一般来说,单元测试的最佳实践是尽可能地保持测试的自包含性,但在我目前的情况下,如果我能够做到这一点并在测试用例之间保持一个恒定的变量,那么它将使测试执行得更快 目前,我调用的任何类型的init函数 override init() { super.init() } 给我留下了一个EXC\u BAD\u指令错误。如果我不能在XCTestCase中使用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
...
您可以使用classsetUp
和tearDown
方法来实现此目的。在第一个测试方法开始之前调用一次classsetUp
方法,在所有测试方法完成之后调用一次classtearDown
方法
我的理解是,这些正是为了处理您描述的那种测试范围的状态。苹果有一些
这种方法的优点是,如果不是单个测试,状态至少保持在测试类的本地 答案很简单。我从没想过要那样做。谢谢@HelloWorld345123123很高兴它有帮助!如果这解决了你的问题,你能把答案标记为正确吗?不要用一行定义来回答任何问题;由于Swift没有静态初始化块,因此不可能以这种方式进行更复杂的静态设置。/*!*@方法-在调用类中的每个测试方法之前调用setUp*setUp方法。*/-(无效)设置@ZaporozhchenkoAleksandr有两个独立的
setUp
方法,实例方法和类方法。类setUp
在调用第一个测试之前只调用一次,而类tearDown
在最后一个测试完成之后只调用一次。究竟为什么这个评论被否决了?这似乎是正确的答案@沃德:不过我有点麻烦。我已重写了类设置方法,但遇到一个编译器错误,表示它无法访问实例成员…@Luke您将希望访问实例setUp()
以访问实例成员。在每次测试之间设置/删除实例成员。使用类setUp()
为未在各个实例之间拆下的类设置初始状态。类方法无法访问实例成员,只能访问类本身的成员。这应该是可接受的答案(而不是负值:()init()XCTestCase的覆盖似乎被破坏,但类设置/拆卸将正确执行相同的任务。您只需将您的想法与每个案例(仅作为一个实例存在)相一致,使用类(静态)变量而不是实例变量。