【发布时间】:2019-12-28 15:19:44
【问题描述】:
我正在尝试测试 GORM 代码。代码路径打开一个新的 GORM 会话。第一个会话将数据添加到 GORM,第二个会话使用它。在测试时,GORM 似乎会在使用内存参数:memory: 时忘记第一个会话的数据。我什至尝试了cache=shared 选项,但没有成功。
这是一个示例测试:
type testRecord struct{
ID string
Data string
}
func TestOpenGormTwice(t *testing.T){
cxn:=":memory:?cache=shared"
database, err := gorm.Open("sqlite3", cxn)
assert.NoError(t, err)
err=database.CreateTable(&testRecord{}).Error
assert.NoError(t, err)
err=database.Create(testRecord{
ID: "1",
Data: "abc",
}).Error
assert.NoError(t, err)
tr:=testRecord{}
err=database.First(&tr).Error
assert.NoError(t, err)
assert.True(t, database.HasTable(&testRecord{}))
//Open :memory: again, hopefully it won't forget what was saved last time
database2, err := gorm.Open("sqlite3", cxn)
assert.NoError(t, err)
assert.True(t, database2.HasTable(&testRecord{}))
}
测试在最后一个 assert.True 处失败。如何更改此代码以通过最后的测试?
我也试过cxn:="memdb1?mode=memory&cache=shared",它似乎可以工作,但实际上它并没有进入内存模式as described in the Sqlite docs。
【问题讨论】:
-
cxn:="file:memdb1?mode=memory&cache=shared"是否如sqllite.org 所述工作?