go test
拒绝构建。这是故意的还是错误?无论哪种方式,都有解决方法吗?
请注意,与Call has possible formatting directive不同,这不是对不接受格式化指令的内置函数的调用。这是对我编写的函数的调用,该函数专门用于接受格式指令。
这是人为的但完整的复制品。注意makeError
旨在处理格式字符串。 go build
可以正常工作,但是go test
会产生以下错误,并且不运行任何测试:
.\example.go:16:13: makeError call has possible formatting directive %v
FAIL sandbox/example [build failed]
开始版本:go version go1.12.7 windows/amd64
example.go
:
package example
import "fmt"
type ErrExample struct {
data interface{}
msg string
}
func (e *ErrExample) Error() string {
return e.msg
}
func Divide(f1 float64, f2 float64) (float64, error) {
if f2 == 0.0 {
return 0, makeError(nil, "Cannot divide %v by 0", f1)
}
return f1 / f2, nil
}
func makeError(data interface{}, msgAndArgs ...interface{}) error {
msg := ""
switch len(msgAndArgs) {
case 0:
// Ignore
case 1:
msg = fmt.Sprint(msgAndArgs[0])
default:
if str, ok := msgAndArgs[0].(string); ok {
msg = fmt.Sprintf(str, msgAndArgs[1:]...)
}
msg = fmt.Sprint(msgAndArgs...)
}
return &ErrExample{data: data, msg: msg}
}
example_test.go
:
package example
import (
"testing"
)
func TestDivide(t *testing.T) {
_, err := Divide(1230, 0)
if err == nil {
t.Errorf("Expected error when dividing by 0")
}
}
答案 0 :(得分:1)
转到测试的帮助文本中:
作为构建测试二进制文件的一部分,请在软件包上进行go run run vet 及其测试源文件来识别重大问题。如果去兽医 发现任何问题,进行测试报告,并且不运行测试 二进制只有默认的Govet Check的高可信度子集是 用过的。该子集是:“原子”,“布尔”,“ buildtags”,“ nilfunc”和 'printf'。您可以查看这些和其他兽医测试的文档 通过“ go doc cmd / vet”。要禁用Go vet的运行,请使用 -vet = off标志。”