Каковы последствия использования UserDefaults.standard в тестах? - PullRequest
1 голос
/ 06 ноября 2019

Предполагая, что в нашей тестовой схеме 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, либо создатьновый экземпляр, чтобы наши тесты могли выполняться параллельно, но я бы хотел выяснить уровень важности здесь. Будет ли это просто мешать нам запускать наш тест параллельно в будущем или это приведет к ошибочным тестам без применения этого параметра?

1 Ответ

1 голос
/ 07 ноября 2019

Тест, запущенный в изоляции, будет работать. Но вот еще одна проблема: он агрессивно очищает пользовательские настройки по умолчанию. Это создаст проблемы для тех, кто хочет выполнить ручное тестирование после запуска этого теста.

Более безопасный подход - setUp() запомнить текущее значение (если оно есть), а затем восстановить его в tearDown().

Самый безопасный способ - использовать подделку. Я описываю это в главе 11 «Как проверить пользовательские значения по умолчанию?

...