首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go测试编译成功,但go构建不成功

Go测试编译成功,但go构建不成功
EN

Stack Overflow用户
提问于 2019-12-11 21:34:30
回答 1查看 434关注 0票数 0

我正在尝试测试go中的主包(在Windows中),虽然我完全删除了缓存(go clean -cache),但是测试似乎是被缓存的。

为了测试这一点,我更改了一个文件(parseinput.go),以便它在编译过程中产生一个错误(未定义变量)。其结果是,无法构建主包:

代码语言:javascript
复制
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):

代码语言:javascript
复制
go\src\xxx\apimonitor> go test
PASS
ok      xxx/apimonitor  0.786s

有什么线索可以说明为什么会发生这种情况,为什么测试不会重新编译呢?是否还有其他地方可以从以前的构建中缓存此包?

更新

添加了一些打印语句之后,测试(go test)似乎成功地编译了 inputparser.go (尽管err变量是未定义的),但是构建失败了(如上面所示)。所以我才相信那个测试是缓存的。下面是在构建中失败的源代码示例:

代码语言:javascript
复制
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
}

关于为什么会发生这种情况,有任何线索或文件吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-11 23:16:17

命令启动 编译包和依赖项 生成标志由构建、清理、获取、安装、列表、运行和测试命令共享: -a强制重建已经是最新的软件包。-n打印命令,但不运行它们。-v在编译包时打印它们的名称。-x打印命令。 删除对象文件和缓存文件 用法: 清理旗子包 -cache标志导致清除整个go生成缓存。 -testcache标志使go生成缓存中的所有测试结果失效。 测试标志 当“go test”以package模式运行时,“go test”缓存成功的包测试结果,以避免不必要的重复运行测试。若要禁用测试缓存,请使用除可缓存标志之外的任何测试标志或参数。显式禁用测试缓存的惯用方法是使用-count=1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59294439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档