package codec import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestProtobufCodec(t *testing.T) { codec := NewProtobufCodec() // 测试名称 assert.Equal(t, "protobuf", codec.Name(), "Expected name to be 'protobuf'") } func TestProtobufCodecEncodeInvalidType(t *testing.T) { codec := NewProtobufCodec() // 测试编码非proto.Message类型 _, err := codec.Encode("invalid") assert.Error(t, err, "Expected error for invalid type") } func TestProtobufCodecDecodeInvalidType(t *testing.T) { codec := NewProtobufCodec() // 测试解码为非proto.Message类型 var str string err := codec.Decode([]byte("test"), &str) assert.Error(t, err, "Expected error for invalid type") } func TestProtobufCodecWithProtoMessage(t *testing.T) { codec := NewProtobufCodec() // 创建实现了protoMessage接口的测试类型 msg := &testProtoMessage{ data: []byte("test data"), } // 测试编码 encoded, err := codec.Encode(msg) require.NoError(t, err, "Expected no error when encoding") assert.Equal(t, msg.data, encoded, "Expected encoded data to match") // 测试解码 decoded := &testProtoMessage{} err = codec.Decode(encoded, decoded) require.NoError(t, err, "Expected no error when decoding") assert.Equal(t, msg.data, decoded.data, "Expected decoded data to match") } // testProtoMessage 实现protoMessage接口的测试类型 type testProtoMessage struct { data []byte } func (m *testProtoMessage) Marshal() ([]byte, error) { return m.data, nil } func (m *testProtoMessage) Unmarshal(data []byte) error { m.data = data return nil }