You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After upgrading to the most recent version of protobuf, we are finding all of our comparisons are failing due to some new unexported fields.
There is a cmp.Option implementation provided by the protobuf module in godoc.org/google.golang.org/protobuf/testing/protocmp#Transform - but I now need to go and add this option to every single compare.
This particular check is generic and safe to add on every compare - would it be reasonable to provide a way to install such global comparison options?
This feels like it might be slightly safer for a test assertion tool, as each "global" would be scoped to the test binary.
The text was updated successfully, but these errors were encountered:
This feels like it might be slightly safer for a test assertion tool, as each "global" would be scoped to the test binary.
I think that would be true of the go-cmp package as well, as long as the defaults are registered in a test file.
It was my understadning that go-cmp already worked well with protobuf, because all the types it generates implemented Equal. Is that no longer the case? Maybe it is specifically the gRPC types I am thinking of. If the comparison does use the Equal method I wonder if go-cmp should consider it the same as a cmp.Comparer which skips the check for unexported fields.
I'm also not keen on adding a global registry of cmp options. What I would probably do would be to create an assertDeepEqualPB func, and sed replace all the existing calls. I guess that is still some amount of work if there are lots of packages with these tests.
From what I can tell, grpc/protobuf generated code didn't used to have any private fields - but the new rewrite they did recently now does.
I've opened an issue with them about implementing Equal - golang/protobuf#1238 - answer so far is noncommittal in either direction, but it sounds like they're wary of adding more codegen in general.
In practice it turns out the affected codebase only tests protobuf generated structs at the edges - so adding compare options to each DeepEquals was merely annoying, but not too arduous.
I originally tried pitching this to go-cmp, and they said no because they quite resonably want all comparison to be stateless.
google/go-cmp#241 (comment)
The context from that issue is:
This feels like it might be slightly safer for a test assertion tool, as each "global" would be scoped to the test binary.
The text was updated successfully, but these errors were encountered: