我总是假设对于一个给定的测试类,Xcode将创建该类的单个对象,然后按顺序运行测试。但是当我尝试这个例子时(这个方案的并行测试选项是关闭的),看起来Xcode正在创建测试类的多个示例,然后在它们上独立运行测试。
这是否会有效地消除对tearDown
的需要,因为无论如何都会丢弃该示例。
final class ExampleTests: XCTestCase {
private let dataStorage: DataStorage = {
print("*** Creating data storage")
return DataStorage()
}()
func test1() {
print("*** Data storage value: \(dataStorage.number)")
dataStorage.number += 1
XCTAssertEqual(dataStorage.number, 2)
}
func test2() {
print("*** Data storage value: \(dataStorage.number)")
dataStorage.number += 1
XCTAssertEqual(dataStorage.number, 2)
}
func test3() {
print("*** Data storage value: \(dataStorage.number)")
dataStorage.number += 1
XCTAssertEqual(dataStorage.number, 2)
}
func test4() {
print("*** Data storage value: \(dataStorage.number)")
dataStorage.number += 1
XCTAssertEqual(dataStorage.number, 2)
}
}
class DataStorage {
var number = 1
}
字符串
这就是结果:
*** Creating data storage
*** Creating data storage
*** Creating data storage
*** Creating data storage
*** Data storage value: 1
*** Data storage value: 1
*** Data storage value: 1
*** Data storage value: 1
型
我们可以看到数据存储对象被创建了多次->多个ExampleTests
对象被创建。
我尝试了100个这样的测试,在运行任何测试之前创建了100个对象。
1条答案
按热度按时间rks48beu1#
在xUnit中,为每个测试创建一个单独的示例。所有这些都是在运行任何测试之前创建的。这就是为什么setUp和tearDown很重要的原因:它们给予您可以控制何时创建和销毁对象。参见Most Swift Devs Are Wrong About XCTestCase tearDown…