在测试中使用UserDefaults.standard有什么后果?

假设在我们的测试方案中,我们未选中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测试?

veralan329 回答:在测试中使用UserDefaults.standard有什么后果?

该测试可以单独运行。但这是另一个问题:它会主动清除用户默认设置。这对于在运行此测试后想要进行手动测试的任何人都会造成问题。

一种更安全的方法是让setUp()记住当前值(如果有),然后将其还原到tearDown()中。

最安全的方法是使用伪造品。我在 iOS Unit Testing by Example: XCTest Tips and Techniques Using Swift 的第11章“如何测试用户默认值?(虚假对象简介)”中对此进行了描述。

本文链接:https://www.f2er.com/3152643.html

大家都在问