Go 在测试中设置/重置模拟函数
示例
本示例说明如何模拟与单元测试无关的函数调用,然后使用defer语句将模拟的函数调用重新分配回其原始函数。
var validate = validateDTD
// ParseXML解析b以获取XML元素和值,并将其作为以下内容的映射返回
// 字符串键/值对。
func ParseXML(b []byte) (map[string]string, error) {
// 我们不在乎在单元测试中针对DTD进行验证
if err := validate(b); err != nil {
return err
}
// 解析b等的代码
}
func validateDTD(b []byte) error {
// 从某些外部存储中获取DTD,并使用它来验证b等。
}在我们的单元测试中
func TestParseXML(t *testing.T) {
// 将原始验证函数分配给变量。
originalValidate = validate
// 在此测试中使用mockValidate函数。
validate = mockValidate
// 将重新分配推迟回原始验证功能。
defer func() {
validate = originalValidate
}()
var input []byte
actual, err := ParseXML(input)
// 断言等
}
func mockValidate(b []byte) error {
return nil // 总是返回nil
}
热门推荐
10 财运虎年祝福语简短语
11 单亲爸爸春节祝福语简短
12 狗狗上厕所训练
13 植物种植祝福语简短
14 翻译考试祝福语朋友简短
15 个人周年庆简短祝福语
16 狗狗怎么训练
17 分别祝福语简短搞笑英文
18 生日广州男生祝福语简短