go test当对库中要按设计进行测试的函数的调用包含格式化指令时,拒绝构建。这是故意的还是错误?不管怎样,有解决方法吗?
请注意,与Call has possibleformatingdirective不同,这不是对不接受格式指令的内置函数的调用。它是对我编写的函数的调用,该函数是专门为接受格式化指令而设计的。
这是一个人为但完整的复制品。NotemakeError旨在处理格式字符串。go build工作正常,但go test会产生以下错误并且不运行任何测试:
.\example.go:16:13: makeError call has possible formatting directive %v
FAIL sandbox/example [build failed]
Run Code Online (Sandbox Code Playgroud)
去版本:go version go1.12.7 windows/amd64
example.go:
.\example.go:16:13: makeError call has possible formatting directive %v
FAIL sandbox/example [build failed]
Run Code Online (Sandbox Code Playgroud)
example_test.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}
}
Run Code Online (Sandbox Code Playgroud)
来自 go test 的帮助文本:
作为构建测试二进制文件的一部分,go test 对包及其测试源文件运行 go vet 以识别重大问题。如果 go vet 发现任何问题,go test 会报告这些问题并且不会运行测试二进制文件。仅使用默认兽医检查的高可信度子集。该子集是:“atomic”、“bool”、“buildtags”、“nilfunc”和“printf”。您可以通过“go doc cmd/vet”查看这些和其他兽医测试的文档。要禁用 go vet 的运行,请使用 -vet=off 标志。”
| 归档时间: |
|
| 查看次数: |
6883 次 |
| 最近记录: |