Shouldn’t NSUserDefault be clean slate for unit tests?
Using named suites like in this answer worked well for me. Removing the user defaults used for testing could also be done in func tearDown(). class MyTest : XCTestCase { var userDefaults: UserDefaults? let userDefaultsSuiteName = “TestDefaults” override func setUp() { super.setUp() UserDefaults().removePersistentDomain(forName: userDefaultsSuiteName) userDefaults = UserDefaults(suiteName: userDefaultsSuiteName) } }