假设在我们的测试方案中,我们没有选中execute in parallel on simulator
。
下面的测试会不会是胡扯?
class ExampleTests: XCTestCase {
override func setUp() {
super.setUp()
UserDefaults.clear()
}
func testSomethingWithUserDefaults() {
UserDefaults.standard.setValue("Hola", forKey: "exampleKey")
ExampleClass.doSomethingThatUsesUserDefaults()
XCTAssertEqual(ExampleClass.foo, expectedValue)
}
override class func tearDown() {
UserDefaults.clear()
super.tearDown()
}
我知道最好是对UserDefaults进行存根或创建一个新实例,以便我们的测试可以并行运行,但是我想在这里确定重要性级别。这是否会阻止我们将来并行运行测试,还是在不应用此设置的情况下进行flakey测试?
独立运行的测试将起作用。但这是另一个问题:它会主动清除用户默认设置。这对于在运行此测试后想要进行手动测试的任何人都会造成问题。
一种更安全的方法是让setUp()
记住当前值(如果有),然后将其还原到tearDown()
中。
最安全的方法是使用假货。我在iOS Unit Testing by Example: XCTest Tips and Techniques Using Swift中的第11章“如何测试UserDefaults?(虚假对象简介)”中对此进行了描述。