Понимание покрытия теста
У меня есть простой пакет в моей программе Go для генерации хеш-идентификатора.
Я также написал тест для этого, но не смог понять, почему я покрываю только 83% утверждений.
Ниже приведен код функции моего пакета:
package hashgen
import (
"math/rand"
"time"
"github.com/speps/go-hashids"
)
// GenHash function will generate a unique Hash using the current time in Unix epoch format as the seed
func GenHash() (string, error) {
UnixTime := time.Now().UnixNano()
IntUnixTime := int(UnixTime)
hd := hashids.NewData()
hd.Salt = "test"
hd.MinLength = 30
h, err := hashids.NewWithData(hd)
if err != nil {
return "", err
}
e, err := h.Encode([]int{IntUnixTime, IntUnixTime + rand.Intn(1000)})
if err != nil {
return "", err
}
return e, nil
}
Ниже мой тестовый код:
package hashgen
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGenHash(t *testing.T) {
hash, err := GenHash()
if err != nil {
assert.Error(t, err, "Not able to generate Hash")
}
assert.Nil(t, err)
assert.True(t, len(hash) > 0)
}
При запуске Go-теста с coverprofile упоминается, что следующие части не охватываются тестом:
if err != nil {
return "", err
}
Любой совет?
1 ответ
Спасибо за ответы.
Я разбил свою функцию GenHash() на более мелкие части, чтобы проверить ошибки, возвращаемые пакетом go-hashids. Теперь я могу увеличить процент тестового покрытия.
package hashgen
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGenHash(t *testing.T) {
hash, err := GenHash()
if err != nil {
assert.Error(t, err, "Not able to generate Hash")
}
assert.Nil(t, err)
assert.True(t, len(hash) > 0)
}
func TestNewhdData(t *testing.T) {
hd := newhdData()
assert.NotNil(t, hd)
}
func TestNewHashID(t *testing.T) {
hd := newhdData()
hd.Alphabet = "A "
hd.Salt = "test"
hd.MinLength = 30
_, err := newHashID(hd)
assert.Errorf(t, err, "HashIDData does not meet requirements: %v", err)
}