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

问题描述 投票:1回答:1

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

swift xcode unit-testing xctest userdefaults
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.