在尝试对使用以下结构的代码进行测试时:
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
是包含我想完全访问* /
我基本上需要能够设置dbConnection
中的DatabaseSt
进行测试,而无需修改源代码。
答案 0 :(得分: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
...
}