在尝试对使用以下结构的代码进行测试时:

type DatabaseSt struct {
    DBName            string
    DBConnectionStr   string
    dbConnection      *sql.DB
    InterpolateParams bool

    //Archived Databases
    MinFinancialYear int
    MaxFinancialYear int
}

//DatabaseContext The context to use if the use of a database is needed.
type DatabaseContext struct {
    *Context
    Database DatabaseSt
}

我偶然发现了这篇中型文章,声称您可以在测试代码中导出带有其内部结构的Golang软件包。 不幸的是,我不确定它们的最终含义是什么:

仅当我们运行go test时,export_test.go才被包括在内,因此它不会污染您的API,并且用户从不访问它们(不像Java的@VisibleForTesting),并且它搭建了一个桥,让未导出的桥可以在math_test中访问

更糟糕的是,它的复制无法快速实现:

在此处输入图片说明

/ *在这里, context是包含我想完全访问* /的结构的包

我基本上需要能够设置该DatabaseStdbConnection进行测试,而无需修改源代码。

#1楼 票数:1

添加以下名为export_test.go的文件:

package context

func SetDbConnection(DatabaseSt *ds, db *sql.DB) {
    ds.dbConnection = db
}

从同一目录中的其他测试文件中使用它,如下所示:

package context_test

import "context"

func FooTest(t *testing.T) {
     ...
     context.SetDbConnection(ds, db)
     ...
}

或者,在上下文包中编写测试,以便您可以完全访问成员:

package context

func FooTest(t *testing.T) {
     ...
     ds.dbConnection = db
     ...
}

  ask by Mike Warren translate from so

未解决问题?本站智能推荐:

2回复

Golang-有效测试多个软件包

我想从我的应用程序执行所有测试,现在我使用命令来执行它: 不幸的是,尽管单个测试运行得很快,但仍需要花费很长时间。 我认为问题在于go需要在运行测试之前编译每个软件包(及其依赖项)。 我尝试使用-i标志,它会有所帮助,但我对测试时间仍然不满意。 您是否有更好的主意如何有效地测试多个
1回复

是否可以对我的软件包未导入特定软件包进行单元测试?

我想确保我的Go包使用“ dal”包提供的var实例,并且不会意外导入和直接使用db access包。 我想我可以在源代码上进行正则表达式搜索,但是我想知道是否有办法通过标准Go测试来确保规则? 只是想知道我要做什么: 接口包: 实施包: 用户代码包:
4回复

前往:如何对多个软件包运行测试?

我在src /下的子目录下有多个软件包,可以使用go test为每个软件包运行测试。 当尝试使用go test ./...运行所有测试时,测试正在运行,但失败。 这些测试是针对本地数据库服务器运行的,每个测试文件都有带有db指针的全局变量。 我尝试使用-parallel 1运行测试以
2回复

我如何对用golang编写的这个promptui包进行单元测试?

我是golang的新手,我在我的一个项目中使用了名为promptui( https://github.com/manifoldco/promptui )的交互式提示。 我已经为这个项目编写了几个单元测试,但我正在努力解决这个需要输入的特定包的测试方法。 例如,我将如何测试以下代码行(封装在
1回复

当测试在另一个软件包中时,获取覆盖率统计信息

我的测试与我的代码不在同一个程序包中。 我发现这是一种使用很多测试文件来组织代码库的简洁方法,而且我读到,将测试限制为通过包的公共api进行交互是一个好主意。 所以看起来像这样: 我可以输入go test bandsintown-api/api_client_tests -cover并
1回复

Go单元测试正在运行从“goget”命令导入的软件包

我导入了一个软件包“ gopkg.in/yaml.v2”。 这是在目录结构下 当我在构建期间运行命令go test -v ./... gopkg.in/yaml.v2 go test -v ./...时,它的运行单元测试也从导入的软件包gopkg.in/yaml.v2中进行。 在我的情况
4回复

如何在golang中测试主包函数?

我想测试一下我的主程序包中包含的一些函数,但我的测试似乎无法访问这些函数。 我的示例main.go文件如下所示: 和我的main_test.go文件看起来像: 当我go test main_test.go我得到 据我所知,即使我将测试文件移动到其他地方并尝试从main.go文件导
1回复

如何从“测试”包中测试Golang中的主包?

我有一个用Golang编写的简单程序。 这是一个API。 因此,在项目文件夹中,有一个名为cmd的文件夹,其中包含我的main软件包(用于初始化应用程序并定义API的端点)。 还有一个以我的程序命名的文件夹,其中包含来自一个也以我的程序命名的包中的多个文件。 该程序包充当执行所有必要查询