GO中的测试 - 项目包中的代码覆盖率

时间:2016-03-26 15:43:12

标签: unit-testing go code-coverage

我有一个关于在Go(lang)项目中生成代码覆盖率的问题。我有这个简单的结构:

ROOT/
    config/
    handlers/
    lib/
    models/
    router/
    main.go

config包含JSON中的配置和一个简单的config.go,它读取并解析JSON文件并填充初始化数据库连接时使用的Config结构。 handlers包含控制器(即router/routes.go中描述的各个METHOD + URL的处理程序)。 lib包含一些DB,请求响应器和记录器逻辑。 models包含要从-JSON和DB映射的结构及其func。最后router包含路由器和路由定义。

基本上只是通过测试一个单一的处理程序,我确保调用我的配置,记录器,数据库,响应器,路由器和相应的模型(并以某种方式进行测试)。

现在,如果这是一个PHP或Java,或者我不知道还有什么语言,拥有并运行该单一处理程序测试也会为所有其他被调用的代码部分创建代码覆盖,即使它们处于不同的文件夹(即这里的包)。不幸的是,在Go中并非如此。

我的大多数lib个文件只有一种方法(例如InitDB()ReadConfig()NewRouter()Logger()),因此代码很少为了能够为他们提供代码覆盖,我必须在这些包中创建愚蠢的测试,同时通过测试主URL处理包来调用和测试它们。

对于一个项目中包含的其他包,如何从包中获取代码覆盖率是否有任何方法?

1 个答案:

答案 0 :(得分:0)

您可以在单个测试中导入包,并根据它们在您的应用程序中的使用方式为它们编写测试。例如,您可以使用一个测试main_test.go导入所有其他包,然后为导入的包中的方法编写测试。
像这样(在main_test.go中):

package main

import (
    "testing"
    "lib"
    "models"
    "handlers"
    // etc
)

// testing code here

但是,在我个人看来,最好确保每个包都做它应该做的事情。最好的方法是使用自己的测试套件测试单个软件包本身。