相关疑难解决方法(0)

您如何测试golang命令行输出

我想测试golang命令行应用程序的输出,但是我不太确定如何使用go的测试库来实现。

假设我有一个像这样的程序:

package main

import (
    "flag"
    "fmt"
)

func main() {
    const (
        cityDefault = "San Francisco"
        cityDoc     = "the city you want the forecast for"
    )
    var city string
    flag.StringVar(&city, "city", cityDefault, cityDoc)
    flag.StringVar(&city, "c", cityDefault, cityDoc)
    flag.Parse()

    fmt.Println(city)
}
Run Code Online (Sandbox Code Playgroud)

我想测试这两个:

$ ./myapp -c "Los Angeles"
$ ./myapp -city "Los Angeles"
Run Code Online (Sandbox Code Playgroud)

...输出Lost Angeles。因此,我想问题是,如何集成测试golang命令行应用程序的输出?

testing go

5
推荐指数
1
解决办法
2435
查看次数

在golang中使用子进程测试时如何生成单元测试覆盖率?

我有大部分代码的单元测试.但我无法弄清楚如何为主包中的main()中的某些代码生成单元测试覆盖率.

主要功能非常简单.它基本上是一个选择块.它会读取标志,然后调用另一个函数/执行某些操作,或者只是在屏幕上打印帮助.但是,如果未正确设置命令行选项,它将以各种错误代码退出.因此,需要进行子流程测试.

我尝试了子流程测试技术,但修改了代码,使其包含覆盖标记:

cmd := exec.Command(os.Args[0], "-test.run=TestMain -test.coverprofile=/vagrant/ucover/coverage2.out")
Run Code Online (Sandbox Code Playgroud)

以下是原始代码:https ://talks.golang.org/2014/testing.slide#23上述幻灯片的说明:http://youtu.be/ndmB0bj7eyw?t = 47m16s

但它不会生成封面配置文件.我一直无法弄清楚为什么不.它确实为主进程执行测试生成封面配置文件,但当然,在子进程中执行的任何代码都不会标记为已执行.

我尝试尽可能多地实现代码覆盖.我不确定我是否遗漏了某些东西,或者是否有更简单的方法可以做到这一点.或者如果不可能的话.

任何帮助表示赞赏.

谢谢

阿梅尔

unit-testing go

4
推荐指数
2
解决办法
1091
查看次数

标签 统计

go ×2

testing ×1

unit-testing ×1