我正在研究一个关于编组的示例,并决定巧妙地使用它。我希望可以传递一个类似于json.Unmarshall
函数的通用接口引用,并通过输入而不是重复相同的代码来处理我的其他测试用例(是的,我来自Java(。相反,我得到了一个映射而不是一个结构。我似乎也没有办法向下暗示这种"类型"的结构是什么。
问题:
- 我怎样才能取回合适的结构类型
- 采用这种实用方法是否合理
代码:
//test 1 - simple dto
var country models.Country
var outCountry, errorCountry = attemptParse("Simple DTO", "./json/country.json", country)
fmt.Println("Return - ", outCountry, " - ", errorCountry)
...
func attemptParse(test string, dataFile string, v interface{}) (interface{}, error){
...
err := json.Unmarshal(data, &v)
if err != nil {
fmt.Println("Test - ", test, " - fail", err)
return nil, err
}
fmt.Println("Test - ", test, " - result:")
fmt.Println(v)
return v, nil
}
我也尝试过编组到nptr := reflect.New(reflect.TypeOf(v))
,但最终我得到了一个无法解析的地址。
输出:
Test - Simple DTO - start
Test - Simple DTO - result:
map[Capital:Washington DC Continent:North America Name:USA]
Return - map[Capital:Washington DC Continent:North America Name:USA] - <nil>
-
尝试将指针传递给
attemptParse()
函数:var outCountry, errorCountry = attemptParse("Simple DTO", "./json/country.json", &country)
并更改
err := json.Unmarshal(data, &v)
至
err := json.Unmarshal(data, v)
请查看此游乐场了解更多详细信息:https://go.dev/play/p/XEN5cZce0tG
-
我不确定你到底想测试什么。但我宁愿先尝试表驱动测试:https://dave.cheney.net/2019/05/07/prefer-table-driven-tests.