始めに
UserDefaultsを使用したクラスのテスト方法について調べたいと思います。
実装
@testable import Project_Code
import Foundation
import Testing
class AppThemePresenterTests {
// MARK: Lifecycle
init() {
userDefaults = UserDefaults(suiteName: AppThemePresenterTests.suiteName)!
}
deinit {
userDefaults.removePersistentDomain(forName: AppThemePresenterTests.suiteName)
}
// MARK: Internal
static let suiteName: String = "Test"
@Test func updateAppTheme() {
// Given
let presenter = AppThemePresenter(userDefaults: userDefaults)
let appTheme = AppTheme.light
// When
presenter.updateAppTheme(appTheme: appTheme)
// Then
#expect(presenter.selectedAppTheme == appTheme)
#expect(userDefaults.appTheme == appTheme)
}
// MARK: Private
private let userDefaults: UserDefaults
}
Point
- PresenterがDIできる設計になっていること
-
UserDefaults.init(suiteName:)
を使用して初期化すること
init(suiteName:) | Apple Developer Documentation - 使用したUserDefaultsを削除すること
removePersistentDomain(forName:) | Apple Developer Documentation
終わりに
設計時にDIを意識しながらコードを書くことを、もう少し心がけたいと思いました。
参考