【发布时间】:2019-03-17 19:48:28
【问题描述】:
尝试对使用以下结构的代码进行测试:
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
}
我偶然发现 this Medium article 声称您可以在测试代码中导出 Golang 包及其内部结构。不幸的是,我不确定他们最后的话是什么意思:
export_test.go 仅在我们运行 go test 时被包含,因此它不会污染您的 API,并且用户永远不会访问它们(不像 java 的 @VisibleForTesting),它构建了一个桥梁,让未导出的可以在 math_test 中访问
更糟糕的是,复制它会导致无处可去:
/* 这里,context 是包含我想要完全访问的结构的包 */
我基本上需要能够设置那个DatabaseSt的dbConnection进行测试,而不需要修改源代码。
【问题讨论】:
-
我认为你可以创建一个包名为“packagename_test”的测试文件来实现这一点,但我不确定
-
var ContextPkg = context对我来说没有意义...你读过golang.org/pkg/testing 和golang.org/cmd/go/#hdr-Test_packages 了吗? -
那篇文章谈论的是在同一个包中使用不同的包标识符进行“黑盒”测试。如果您需要导出额外的部分来执行此操作,我不明白通过外部包名称进行测试的意义何在。几乎所有代码都在同一个包中进行测试。
标签: unit-testing go