最近我一直在玩 golang 和谷歌的應(yīng)用引擎。在實現(xiàn)存儲庫時,我遇到了非常緩慢的單元測試執(zhí)行。我所做的就是ctx,_ := aetest.NewContext(nil)在每個測試中調(diào)用以獲得一個干凈的數(shù)據(jù)庫。這會在每次測試中啟動一個新服務(wù)器,從而導(dǎo)致測試緩慢。最近我一直試圖通過在 TestMain 中啟動它來解決這個問題。var ctx aetest.Contextfunc TestMain(m *testing.M) { ctx,_ = aetest.NewContext(nil) code := m.Run() ctx.Close() os.Exit(code)}func TestMyRepository(t *testing.T){ cleanDatastore() repo := &MyRepository{ctx} repo.DoSomething()}在函數(shù)cleanDatastore 中,我一直在執(zhí)行一個 bash 腳本,該腳本基本上運行一個 SQLite 命令來清理保存在 /tmp 中的本地數(shù)據(jù)庫。#!/usr/bin/env bashPATH=$1cd $PATHecho "Cleaning datastore..."/usr/bin/sqlite3 datastore "delete from \"dev~testapp!!EntitiesByProperty\";"/usr/bin/sqlite3 datastore "delete from \"dev~testapp!!Entities\";"echo "Datastore is clean."是我想要做的有意義的事情還是有更簡單的方法來實現(xiàn)更好的測試時間。
1 回答

MYYA
TA貢獻1868條經(jīng)驗 獲得超4個贊
無種類的僅鍵查詢(獲取所有實體的鍵,無論種類如何)應(yīng)該會有所幫助:
q := datastore.NewQuery("").KeysOnly()
然后,您遍歷所有這些鍵并刪除它們中的每一個,例如:
for t := q.Run(ctx); ; {
key, err := t.Next(nil)
if err == datastore.Done {
break
}
if err != nil {
serveError(c, w, err)
return
}
datastore.Delete(ctx, key)
}
將鍵放入數(shù)組并使用可能會稍微快一些DeleteMulti,但是,在本地數(shù)據(jù)存儲上,我懷疑這不會產(chǎn)生可測量的差異。
- 1 回答
- 0 關(guān)注
- 208 瀏覽
添加回答
舉報
0/150
提交
取消