FMDB 单元测试如果创建成功 table 未通过
FMDB unit test if created table successfully didn't pass
我想对 table 是否已由 FMDB 成功创建进行单元测试。
db.createGoodTable("good")
XCTAssertTrue(db.tableExists("good")!)
我考不上。错误是:
The FMDatabase <FMDatabase: 0x6080000bfb00> is not open.
所以我尝试在检查存在之前打开它:
db.createGoodTable()
db.open()
XCTAssertTrue(db.tableExists("good")!)
还是一样的错误。
PS: getDatabase
通过了单元测试,没有任何问题获得数据库。
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()
}
编辑
func getDatabase(_ dbName: String) -> FMDatabase? {
let dbPath = databasePath + "/" + dbName
guard FileManager.default.fileExists(atPath: dbPath) else {
return nil
}
return FMDatabase(path: dbPath)
}
createGoodTable
中的 db
引用正在将本地 db
变量设置为新的 FMDatabase
实例,当 createGoodTable
returns.您测试中的 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
的信息。但基本思想是您要确保不创建第二个本地 FMDatabase
实例,然后尝试在其他地方引用它。
我想对 table 是否已由 FMDB 成功创建进行单元测试。
db.createGoodTable("good")
XCTAssertTrue(db.tableExists("good")!)
我考不上。错误是:
The FMDatabase <FMDatabase: 0x6080000bfb00> is not open.
所以我尝试在检查存在之前打开它:
db.createGoodTable()
db.open()
XCTAssertTrue(db.tableExists("good")!)
还是一样的错误。
PS: getDatabase
通过了单元测试,没有任何问题获得数据库。
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()
}
编辑
func getDatabase(_ dbName: String) -> FMDatabase? {
let dbPath = databasePath + "/" + dbName
guard FileManager.default.fileExists(atPath: dbPath) else {
return nil
}
return FMDatabase(path: dbPath)
}
createGoodTable
中的 db
引用正在将本地 db
变量设置为新的 FMDatabase
实例,当 createGoodTable
returns.您测试中的 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
的信息。但基本思想是您要确保不创建第二个本地 FMDatabase
实例,然后尝试在其他地方引用它。