Skip to content

Instantly share code, notes, and snippets.

@colinfwren
Created January 18, 2025 22:54
Show Gist options
  • Save colinfwren/39556d3397023f141243805c530ee681 to your computer and use it in GitHub Desktop.
Save colinfwren/39556d3397023f141243805c530ee681 to your computer and use it in GitHub Desktop.
Creating a mock UserDefaults
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