Files
go-easy-utils/jsonUtil/parse_map_test.go
T
2024-04-03 14:30:15 +08:00

92 lines
2.4 KiB
Go

package jsonUtil
import (
"reflect"
"testing"
)
func TestParseMap(t *testing.T) {
type TestData struct {
Foo string
Bar int
}
// 包含映射类型的测试用例
testData := map[string]any{
"Foo": "hello",
"Bar": 42,
}
var result map[string]any
err := parseMap(reflect.ValueOf(&result).Elem(), testData)
if err != nil {
t.Errorf("parseMap 失败: %s", err)
}
// 检查值是否被正确解析
expectedResult := map[string]any{"Foo": "hello", "Bar": 42}
if !reflect.DeepEqual(result, expectedResult) {
t.Errorf("parseMap 结果不匹配:\n期望值: %v\n实际值: %v", expectedResult, result)
}
}
func TestParseValue(t *testing.T) {
// 测试解析原始类型
var intValue int
err := parseValue(reflect.ValueOf(&intValue).Elem(), 42)
if err != nil {
t.Errorf("parseValue 失败: %s", err)
}
if intValue != 42 {
t.Errorf("parseValue 结果不匹配: 期望值 42,实际值 %d", intValue)
}
// 测试解析结构体
type TestStruct struct {
Name string
Age int
}
var structValue TestStruct
err = parseValue(reflect.ValueOf(&structValue).Elem(), map[string]any{"Name": "John", "Age": 30})
if err != nil {
t.Errorf("parseValue 失败: %s", err)
}
expectedStructValue := TestStruct{"John", 30}
if !reflect.DeepEqual(structValue, expectedStructValue) {
t.Errorf("parseValue 结果不匹配:\n期望值: %v\n实际值: %v", expectedStructValue, structValue)
}
// 测试解析切片
var sliceValue []int
err = parseValue(reflect.ValueOf(&sliceValue).Elem(), []any{1, 2, 3})
if err != nil {
t.Errorf("parseValue 失败: %s", err)
}
expectedSliceValue := []int{1, 2, 3}
if !reflect.DeepEqual(sliceValue, expectedSliceValue) {
t.Errorf("parseValue 结果不匹配:\n期望值: %v\n实际值: %v", expectedSliceValue, sliceValue)
}
// 测试解析接口
var interfaceValue interface{}
err = parseValue(reflect.ValueOf(&interfaceValue).Elem(), "test")
if err != nil {
t.Errorf("parseValue 失败: %s", err)
}
expectedInterfaceValue := "test"
if !reflect.DeepEqual(interfaceValue, expectedInterfaceValue) {
t.Errorf("parseValue 结果不匹配:\n期望值: %v\n实际值: %v", expectedInterfaceValue, interfaceValue)
}
// 测试不支持的类型
var unsupportedValue complex64
err = parseValue(reflect.ValueOf(&unsupportedValue).Elem(), 3.14)
if err == nil {
t.Errorf("parseValue 对于不支持的类型应该失败")
}
}