Created
January 18, 2025 22:54
-
-
Save colinfwren/39556d3397023f141243805c530ee681 to your computer and use it in GitHub Desktop.
Creating a mock UserDefaults
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Testing | |
import Foundation | |
@testable import ExampleApp | |
class MockUserDefaults: UserDefaults { | |
var persistedData: Data? = nil | |
var persistedKey: String? = nil | |
override func set(_ value: Any?, forKey defaultName: String) { | |
persistedData = value as? Data | |
persistedKey = defaultName | |
} | |
override func object(forKey defaultName: String) -> Any? { | |
return persistedData | |
} | |
} | |
@Suite("Some Service that DI's UserDefaults") struct SomeServiceTest { | |
@MainActor @Test("Service restores default values from UserDefaults on init()") func doesSomethingWithUserDefaults() throws { | |
// Setup - create something to store in UserDefaults and set it for the key that would be used | |
let valueToStore = "bar" | |
let someTestDataToStore = SomeModel(foo: valueToStore) | |
let mockUserDefaults = MockUserDefaults() | |
let testData = try? JSONEncoder().encode(someTestDataToStore) | |
mockUserDefaults.set(testData, forKey: "whateverKeyIsUsed") | |
// Init the service and verify that it pulls the value out | |
let service = SomeServiceThatUsesUserDefaults(userDefaults: mockUserDefaults) | |
#expect(service.foo == valueToStore) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment