0

go-mocket を使用して gorm db をモックしようとしていますが、正常に動作しません。単体テストが期待どおりに機能しないように、ClusterExists 関数にモック データを送信していません。

ドキュメントには、「単純なチェーンの使用」と「FakeResponse」をモックする 2 つの方法があります。私は両方の方法で試しましたが、どちらも機能しません。

私の機能:

func ClusterExists(cluster *Cluster, db *gorm.DB) bool {
    c := Cluster{}
    exists := !db.Where("cluster_name = ? AND env_type = ?", cluster.ClusterName, cluster.EnvType).First(&c).RecordNotFound()

    return exists
}

マイ テスト機能:

func SetupTests() *gorm.DB { 
mocket.Catcher.Register() 
mocket.Catcher.Logging = true
db, err := gorm.Open(mocket.DriverName, "connection_string")
if err != nil {
    log.Fatal(err)
}
db.LogMode(true)
//models.DB = db

return db
}
func TestShouldUpdateStats(t *testing.T){
    t.Run("SIMPLE test", func(t *testing.T){
        DB := SetupTests()
        commonReply := []map[string]interface{}{{"cluster_name":"testname", "env_type":"envtype"}}
        mocket.Catcher.NewMock().WithQuery("SELECT * FROM clusters WHERE").WithReply(commonReply)

        //var declaration
        var testCluster Cluster
        testCluster.ClusterName = "testname"
        testCluster.EnvType = "envtype"

        //assert
        if ClusterExists(&testCluster, DB) {
            t.Errorf("There is a record in the database which already exists:")
        }
    })
}

私の testCluster.ClusterName と testCluster.EnvType は、データベースにあるものと同じ内容であるため、次のエラーが表示されます。

t.Errorf("データベースに既に存在するレコードがあります:")

しかし、ClusterExists 関数から「true」を受け取ったことがないため、テストを失敗させることはできません。

Go-Mocket で私が何を間違っているか知っていますか? 私が見逃しているものはありますか?

敬具!

4

1 に答える 1