Go语言 如何编写表驱动开发测试?

9cbw7uwe  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(103)

我正在尝试为以下代码编写TDD。但是,我不能在我的测试代码中覆盖100%的覆盖率。有人能给予我正确的代码来覆盖我的测试吗?
以下代码用于连接我的数据库

func Dbconn() (*sql.DB, error) {

    db, err := sql.Open("postgres", "postgres:root@tcp(localhost:5432)/customer_complaints?multistatements=true")
    if err != nil {
        return nil, err
    }
    return db, nil
}

字符串
下面的代码是我的测试用例包模型

import (
    "database/sql"
    "reflect"
    "testing"

    _ "github.com/lib/pq"
)

func TestDbconn(t *testing.T) {
    db, _ := sql.Open("postgres", "postgres:root@tcp(localhost:5432)/customer_complaints?multistatements=true")
    tests := []struct {
        name    string
        want    *sql.DB
        wantErr bool
    }{
        {
            name:    "Success connection",
            want:    db,
            wantErr: false,
        },
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got, err := Dbconn()
            if (err != nil) != tt.wantErr {
                t.Errorf("Dbconn() error = %v, wantErr %v", err, tt.wantErr)
                return
            }
            if !reflect.DeepEqual(got, tt.want) {
                t.Errorf("Dbconn() = %v, want %v", got, tt.want)
            }
        })
    }
}


如果我运行我的测试,它将只覆盖75%。也给了我这样的错误

go test -v --cover
      === RUN   TestDbconn
      === RUN   TestDbconn/Success_connection
      db_test.go:32: Dbconn() = &{{{} {} 0} {postgres:root@tcp(localhost:5432)/customer_complaints?multistatements=true 0x8d4730} {{} {} 0} {0 0} [] map[] 0 0 0xc0000824e0 false map[] map[] 0 0 0 0 <nil> 0 0 0 0 0x50f1a0}, want &{{{} {} 0} {postgres:root@tcp(localhost:5432)/customer_complaints?multistatements=true 0x8d4730} {{} {} 0} {0 0} [] map[] 0 0 0xc000082420 false map[] map[] 0 0 0 0 <nil> 0 0 0 0 0x50f1a0}
--- FAIL: TestDbconn (0.00s)
    --- FAIL: TestDbconn/Success_connection (0.00s)
        coverage: 75.0% of statements exit status 1

gopyfrb3

gopyfrb31#

您的测试代码的问题似乎在于,您在测试中创建了一个新的数据库连接,然后将其与Dbconn()函数返回的数据库连接进行比较。这两个数据库连接示例将不相等,即使它们可能具有相同的连接参数。
要正确测试Dbconn()函数,不应在测试中创建新的数据库连接。相反,您可以测试函数是否返回非nil数据库连接,并检查连接过程中是否存在任何潜在错误。

package models

import (
    "database/sql"
    "testing"
)

func TestDbconn(t *testing.T) {
    db, err := Dbconn()
    if err != nil {
        t.Fatalf("Dbconn() returned an error: %v", err)
    }
    defer db.Close()

    // Perform a simple query to check if the connection is working
    if err := db.Ping(); err != nil {
        t.Fatalf("Dbconn() connection failed: %v", err)
    }
}

字符串

相关问题