2016-02-29 61 views
0

當我運行以下測試用例時,testRemovePref方法失敗,因爲它實際上並未刪除該值。我使用Xcode 7.2。這是爲什麼發生?爲什麼我不能在swift中刪除NSUserDefaults鍵?

編輯:這隻在測試屬於框架庫時纔會發生。下面的測試似乎在應用程序中運行時工作正常。奇。

import XCTest 
class NSUserDefaultsTests: XCTestCase { 
    func testSetPref() { 
     let prefs = NSUserDefaults.standardUserDefaults() 
     prefs.setValue("value1", forKeyPath: "testKey") 
     let val : String? = prefs.stringForKey("testKey") 
     print("value=\(val)") // prints "value1" 
     XCTAssertEqual("value1", val) 

    } 

    func testRemovePref() { 
     let prefs = NSUserDefaults.standardUserDefaults() 
     prefs.removeObjectForKey("testKey") 

     let val : String? = prefs.stringForKey("testKey") 
     print("value=\(val)") // prints "value1" 
     XCTAssertNil(val) 
    } 
} 
+2

這很奇怪,我跑你的測試,他們都通過了。 –

+0

你打電話給他們?有沒有機會調用'testSetPref'兩次? –

+0

您的測試不應該依賴於其他測試的副作用。據我所知,XCTest不保證你的測試將按你寫的順序運行。 –

回答

0

這時候測試屬於框架庫只發生。 下面的測試似乎在應用程序中運行時工作正常。

當您將應用程序發送到後臺時,應用程序會自動同步默認值。這在測試中不會發生。嘗試添加:

prefs.synchronize() 
+1

我試過(以及一個很好的睡眠()等待它希望同步),但根據其他職位,我明白,不再推薦synchronize()。另外,想知道爲什麼它在我的應用程序測試中正常工作,而不是框架測試? – DustinB

相關問題