我正在尝试测试go中的主包(在Windows中),虽然我完全删除了缓存(go clean -cache),但是测试似乎是被缓存的。
为了测试这一点,我更改了一个文件(parseinput.go),以便它在编译过程中产生一个错误(未定义变量)。其结果是,无法构建主包:
go\src\xxx\apimonitor> go build
# xxx/apimonitor
.\inputparser.go:15:2: undefined: err
.\inputparser.go:16:19: undefined: err,但测试仍然成功完成(go test甚至go test -a):
go\src\xxx\apimonitor> go test
PASS
ok xxx/apimonitor 0.786s有什么线索可以说明为什么会发生这种情况,为什么测试不会重新编译呢?是否还有其他地方可以从以前的构建中缓存此包?
更新
添加了一些打印语句之后,测试(go test)似乎成功地编译了 inputparser.go (尽管err变量是未定义的),但是构建失败了(如上面所示)。所以我才相信那个测试是缓存的。下面是在构建中失败的源代码示例:
func parseStoreInput(strArray []string) (inputStoreTransactionHash, error) {
var parsedIn inputStoreTransactionHash
if !validateInput(strArray, 1, true) {
return parsedIn, errors.New("Expecting an escaped JSON string as input")
}
err = json.Unmarshal([]byte(strArray[0]), &parsedIn)
return parsedIn, err
}关于为什么会发生这种情况,有任何线索或文件吗?
发布于 2019-12-11 23:16:17
命令启动 编译包和依赖项 生成标志由构建、清理、获取、安装、列表、运行和测试命令共享: -a强制重建已经是最新的软件包。-n打印命令,但不运行它们。-v在编译包时打印它们的名称。-x打印命令。 删除对象文件和缓存文件 用法: 清理旗子包
-cache标志导致清除整个go生成缓存。-testcache标志使go生成缓存中的所有测试结果失效。 测试标志 当“go test”以package模式运行时,“go test”缓存成功的包测试结果,以避免不必要的重复运行测试。若要禁用测试缓存,请使用除可缓存标志之外的任何测试标志或参数。显式禁用测试缓存的惯用方法是使用-count=1。
https://stackoverflow.com/questions/59294439
复制相似问题