2017-08-18 40 views
1

我想單元測試是否已成功創建表FMDBFMDB單元測試如果創建表成功沒有通過

db.createGoodTable("good") 
XCTAssertTrue(db.tableExists("good")!) 

我無法通過測試。錯誤是:

The FMDatabase <FMDatabase: 0x6080000bfb00> is not open. 

所以我儘量檢查存在之前將其打開:

db.createGoodTable() 
db.open() 
XCTAssertTrue(db.tableExists("good")!) 

還是同樣的錯誤。

PSgetDatabase通過單元測試沒有任何問題得到一個數據庫。

func createGoodTable() { 
     let sql = "create table if not exists good(name text)" 
     guard let db = self.getDatabase("databaseName"), db.open() else { 
      return false 
     } 
     do { 
      try db.executeUpdate(sql, values: nil) 
     } catch let er as NSError { 
      print(er) 
     } 
     return db.close() 
} 

EDIT

func getDatabase(_ dbName: String) -> FMDatabase? { 
    let dbPath = databasePath + "/" + dbName 
    guard FileManager.default.fileExists(atPath: dbPath) else { 
     return nil 
    } 
    return FMDatabase(path: dbPath) 
} 
+0

@Rob你是對的!我的錯!我調用了FMDatabase'''兩次。謝謝! –

回答

1

createGoodTabledb參考本地db變量設置爲一個新的FMDatabase實例,該實例被丟棄時createGoodTable回報。您的測試中的db參考從未打開過。假設你已經創建了一個FMDatabase例如,只要打開它,而不是創建一個新的實例,而不是創建一個局部變量:

func createGoodTable() -> Bool { 
    let sql = "create table if not exists good(name text)" 

    guard open() else { 
     return false 
    } 

    do { 
     try executeUpdate(sql, values: nil) 
    } catch let er as NSError { 
     print(er) 
     close() 
     return false 
    } 

    return close() 
} 

我從createGoodTable在一些FMDatabase延長或子類實現您的代碼片段推斷。如果沒有,向我們展示更多關於你如何定義和實例化的db。但基本的想法是,你要確保你不要創建第二個本地實例,然後嘗試在其他地方引用它。