首页 > 解决方案 > go test 意外将 -test.timeout 标志传递给被测程序

问题描述

我有一个小的 cli 程序,go-config=<config file>使用flag.String().

当我将go test其称为错误时,因为我的程序说flag provided but not defined: -test.timeout.

go test -v -x -args -config=./config.yml给我:

/usr/lib/go/pkg/tool/linux_amd64/link -o $WORK/b001/...  .../b001/myprogram.test -test.timeout=10m0s -test.v=true -config=./config.yml

换句话说,它将测试参数传递给myprogram,即使我希望这会被标志禁止(应该只在标志之后-args传递参数?)。-args

这是一个错误吗?有没有办法禁止go test将任何标志传递给测试程序,除了我特别告诉它的那些)?

编辑:相关的代码片段:

package main

import (
    "context"
    "encoding/json"
    "flag"
    // ...
)

// ...

var (
    configpath = flag.String("config", "config.yml", "Config file to use, if omitted defaults to config.yml")
    // ...

func init() {
    var err error
    flag.Parse()
    _, err = configGlobal.getConfig(*configpath)
    if err != nil {
        panic("No config loaded")
    }
    // ...
}

通常在没有参数或有参数的情况下运行程序-config ./config.yml,显然传递其他标志不会。

标签: unit-testinggo

解决方案


推荐阅读