在 Go 中模拟 proto.Message

Mocking proto.Message in Go

我编写了一个接受 proto.Message 对象列表的函数。查看 Messagedocumentation, it seems like proto.Message wraps protoreflect.ProtoMessage which contains a single function, ProtoReflect() Message. Looking at the documentation,它实现了 protoreflect 包引用的 return 类型的许多其他函数。

似乎尝试创建一个 mock proto.Message 需要做更多的工作,这是值得的,但我不想完成创建 protobuf 文件、编译它和引用它的整个过程仅用于单元测试。

还有其他方法可以创建模拟 proto.Message 对象吗?

进一步研究后,我决定最好的办法是创建一个实际的 protobuf 消息:

syntax = "proto3";
package my.package;

option go_package = "path/to/my/package"; // golang

message TestRecord {
    string key = 1;
    string value = 2;
}

编译成Golang文件,然后根据自己的需要修改:

$ protoc --go_out=./gopb/ --go_opt=paths=source_relative *.proto

创建测试文件后,我可以将其删除或保存为记录。