mirror of
https://github.com/jefferyjob/go-easy-utils.git
synced 2025-09-28 11:52:08 +08:00
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
package jsonx
|
||
|
||
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 对于不支持的类型应该失败")
|
||
}
|
||
}
|