在 Go 中模拟 proto.Message
Mocking proto.Message in Go
我编写了一个接受 proto.Message
对象列表的函数。查看 Message
的 documentation, 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
创建测试文件后,我可以将其删除或保存为记录。
我编写了一个接受 proto.Message
对象列表的函数。查看 Message
的 documentation, 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
创建测试文件后,我可以将其删除或保存为记录。