我正在尝试为以下代码编写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
型
1条答案
按热度按时间gopyfrb31#
您的测试代码的问题似乎在于,您在测试中创建了一个新的数据库连接,然后将其与Dbconn()函数返回的数据库连接进行比较。这两个数据库连接示例将不相等,即使它们可能具有相同的连接参数。
要正确测试Dbconn()函数,不应在测试中创建新的数据库连接。相反,您可以测试函数是否返回非nil数据库连接,并检查连接过程中是否存在任何潜在错误。
字符串