繁体   English   中英

导出Golang软件包进行测试?

Exporting Golang packages for testing?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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 个回复

添加以下名为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
     ...
}
1 在Golang中测试/模拟第3方软件包

我是Golang的新手,在学习语言时一直采用TDD方法。 我一直相处得很好,但是我发现测试第三方软件包相当笨拙,这使我相信我使用了错误的方法。 我遇到麻烦的特定情况是模拟Redis客户端进行错误处理。 我采用的方法是创建自己的接口,该实现包装了我要使用的客户端方法。 然后,我可 ...

2 Golang-有效测试多个软件包

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

3 Golang测试抱怨子软件包版本

嗨,我有我的应用程序,其结构如下: 两个writeData *文件都将导入包“ pkg_a”。 当我在master分支中进行开发时,“进行构建”和“进行测试”都可以正常工作。 当我切换到另一个分支时,go build仍然可以继续工作,但是go test抱怨“ pkg_a”的原因是: 没有与 ...

4 如何导入golang自己的软件包?

我在导入软件包时遇到问题。 我想导入"golang.org/x/tools/cmd/oracle"和"golang.org/x/tools/oracle"包。 导入这些软件包的正确方法是哪种? 这样,我尝试导入软件包: 最后两次导入都会导致以下问题: 然后我尝试 ...

5 导入相关软件包进行测试

我开发了一种具有以下结构的解决方案: 在test.py我可以轻松导入my_package( from my_package import my_class )。 这在我选择的IDE中非常有用,我可以在其中编写测试用例,执行它们,并最终在需要的地方在要测试的代码中设置断点。 可供分 ...

6 导出 NPM package 的测试实用程序以用于其他 NPM 包

语境我有一个 TypeScript 库作为 NPM package 发布,我们称之为lib 。 我也有 2 个或更多模块(NPM 包),它们依赖lib作为生产依赖项,我们称它们为moduleA和moduleB 。 问题我现在在lib的test目录中创建了一些实用程序,用于对lib的源代码进行单元测试 ...

7 Golang软件包以及跨软件包使用变量

因此,我有点想知道最佳实践是什么。 我有一个带有多个子程序包的应用程序,有些需要访问主程序包中的记录器,因为我使用了带有颜色和时间戳等的自定义记录器。 这样注入的唯一途径是吗? (假设处理程序在名为command的子包中) 我遇到的这个问题是测试变得烦人,因为我不得不模拟记 ...

9 通过插件导出软件包

我有一个第三方eclipse插件,该插件导出了一些在我的其他插件的编译期间不存在的软件包。 这些包对于下游插件是无条件可见的(根据此处的约定,它在Accessible下分类)。 一种选择是手动编辑插件,并禁止导出的软件包。 对我来说,编辑插件不是一个选择(许可证问题)。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM