2017-08-18 57 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。但基本的想法是,你要确保你不要创建第二个本地实例,然后尝试在其他地方引用它。

相关问题