如何提高Go的测试覆盖率?

时间:2017-12-16 19:38:30

标签: testing go

我正在做一些测试。我有一个文件dao.go:

package model_dao
import "io/ioutil"
const fileExtension = ".txt"
type Page struct {
    Title string
    Body  []byte
}
func (p Page) SaveAsFile() (e error) {
    p.Title = p.Title + fileExtension
    return ioutil.WriteFile(p.Title, p.Body, 0600)
}
func LoadFromFile(title string) (*Page, error) {
    fileName := title + fileExtension
    body, err := ioutil.ReadFile(fileName)
    if err != nil {
        return nil, err
    }
    return &Page{title, body}, nil
}

测试文件dao_test.go:

package model_dao_test
import (
    "shopserver/model/dao"
    "testing"
)
func TestDAOFileWorks(t *testing.T) {
    TITLE := "test"
    BODY := []byte("Hello, World!!")
    p := &model_dao.Page{TITLE, BODY}
    p.SaveAsFile()
    p, _ = model_dao.LoadFromFile(TITLE)
    result := p.Body
    if string(BODY) != string(result) {
        t.Error("Body", BODY, "saved.\n", "Load:", result)
    }
}

这里我测试了 Page 中的所有2个方法,但经过测试后我看到了一条消息:

enter image description here

为什么我只获得85.7%?他在哪里获得这个数字以及如何获得100%?

1 个答案:

答案 0 :(得分:4)

请参阅" The Go Blog - The cover story"

go test -coverprofile=coverage.out 
go tool cover -html=coverage.out

这将显示源文件的HTML表示,您可以清楚地看到测试涵盖哪些行。

https://blog.golang.org/cover/set.png

其他Go测试框架也会向您显示相同的可视化 例如,见 GoConvey