【问题标题】:Unit test does not cover locally imported packages单元测试不涵盖本地导入的包
【发布时间】:2018-06-16 20:08:01
【问题描述】:

我是 golang 的新手,想了解如何让这个场景发挥作用?

这是我的结构 GOPATH 设置为 /Users/xyz/project

/Users/xyz/project/src/main.go // import calculator and call SUM with two integeres
/Users/xyz/project/src/main_test.go // test function
/Users/xyz/project/src/calculator/sum.go // SUM function (add two integers)

我有一个导入“计算器”的主要 go 文件,它是一个本地包。当我跑步时

go test -cover

它只给出了 main 的覆盖范围,但不包括 main 导入的包“calculator”。我知道我可以在计算器内编写一个测试,这样可以解决问题,但是有没有办法从 main 获取本地导入包的覆盖范围?

更大的上下文 - 我想这样做的原因是因为我有一个使用 gin 框架用 go 编写的微服务,我想将它作为服务启动并进行 http 调用,并进一步查看覆盖范围的样子(比如组件测试)。我可以通过编写一个启动服务的 main_test go 文件轻松启动它,但我没有得到导入包的覆盖范围。

【问题讨论】:

  • Go 中没有“本地导入的包”。有导入的包和没有导入的包。
  • @Volker 在上面的例子中你叫什么计算器?
  • @user1707312: calculator 是一个包,就像其他包一样。它在路径中没有主机名这一事实只会阻止您直接在其上使用go get
  • 同意!这就是我所说的“本地”导入的意思(因为你必须在使用前导入它们)。拥有这样的包有一个真正的用例。并非您希望将每个包都与应用程序分开托管,因为它在应用程序之外可能毫无意义。在这种情况下,如果在这些包之外运行,单元测试不会计算这些包的覆盖率。下面的链接有答案

标签: go microservices go-gin go-toolchain


【解决方案1】:

终于在这里找到了回复。看起来 go 有一个可以使用的测试二进制文件 https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多