Comments (8)
Basic usage of them seems simple enough, for example:
func (e Example) Equals(e2 Example) bool {
return cmp.Equal(e, e2, cmp.AllowUnexported(Example{}))
}
But even a bit more advanced seems a little odd to me. For example, using AllowUnexported together with IgnoreFields. It still gives a name must be exported
panic for the IgnoreFields
option when I try to ignore an unexported field.
Some examples for this would be nice.
from go-cmp.
I think it may be reasonable for IgnoreUnexported
to be the default behaviour only if there is a way to signal to the user that unexported fields are not checked.
When I first used cmp.Diff
in replacement of reflect.DeepEqual
, it didn't occur to me that unexported fields will not be checked until the tests panic-ed. If, hypothetically, IgnoreUnexported
was set as the default, I would have taken the passing tests as indication that the swap was successful even though the new tests will not cover changes in unexported fields.
Additionally, I think the current behaviour provides an explicit visual indication to other readers that this comparison ignores unexported fields.
if diff := cmp.Diff(a, b, cmpopts.IgnoreUnexported(SomeStruct{})); diff != "" {
t.Errorf("mismatch (-got +want):\n%s", diff)
}
I know that this behaviour is already documented in the package documentation but, perhaps, what may be helpful (especially to new users) are more examples on the usage of these options.
from go-cmp.
Is there any way to IgnoreUnexported
when comparing slices of a specific struct?
from go-cmp.
IgnoreOptions also makes a confusing statement to the effect of "never use this for types you don't control" because of some hand-wavy statement about implementation details changing in the future.
Perhaps a controversial view: IgnoreUnexported should be the default for all types. You cannot check unexported fields anyway, and even if you could, doing so in test would violate the basic tenet of Go readability, which is to test public behavior.
from go-cmp.
Hey there ! any update on this one ? I'm actually interested too ! :p
from go-cmp.
Feel free to mail out a PR fixing this.
from go-cmp.
Can you give an example?
from go-cmp.
it's not easy to understand in my first impression
eg.
GetIssueAdvancedReply_Data is member of GetIssueAdvancedReply, GetIssueAdvancedReply_Data contains some unexported fields. if want to ingore it, it seems should be:
cmp.Equal(tt.want, tt.args.rsp, cmpopts.IgnoreUnexported(pb.GetIssueAdvancedReply{}, pb.GetIssueAdvancedReply_Data{})
hope help
from go-cmp.
Related Issues (20)
- Help with tests using cmp.Diff and chinese characters? HOT 2
- Diff is extremely slow HOT 3
- How to ignore specific field by name? HOT 1
- Ideas for a v2 HOT 3
- Default support for the `netip` package HOT 1
- New minor release of the library? HOT 4
- cmp.Diff() switching from property diffs to "new object" diff when object changes significantly HOT 1
- Inconsistent whitespace produced by cmp.Diff HOT 2
- cmpopts: add EquateUnsetFields(want) or FilterFieldsFrom(want) HOT 1
- IgnoreFields and nested struct HOT 2
- Enable a dependency update tool HOT 2
- Package Name Mismatches HOT 4
- unhelpful output for difference in slices HOT 1
- How to implement jests.js's `expect.any(String)` like functionality? HOT 1
- cmpopts.IgnoreFields does not work on structs with an Equal method HOT 1
- Performance Issue Comparing Array Types HOT 1
- Naming clash for new cmp standard package HOT 4
- Comparing two fields with diffirent types that are semantically equivalent HOT 3
- String diff for UUIDs can use strings.Join syntax which makes it more confusing HOT 3
- Reporter truncating important context on diff output but leaving others alone
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-cmp.