-
Notifications
You must be signed in to change notification settings - Fork 466
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mocking in given is ignored when mocked in setup method #1762
Conversation
Codecov ReportPatch coverage:
Additional details and impacted files@@ Coverage Diff @@
## master #1762 +/- ##
============================================
+ Coverage 79.76% 79.94% +0.18%
- Complexity 4054 4114 +60
============================================
Files 425 425
Lines 12886 12968 +82
Branches 1622 1633 +11
============================================
+ Hits 10278 10367 +89
+ Misses 1999 1986 -13
- Partials 609 615 +6
☔ View full report in Codecov by Sentry. |
The Interactions now allow to override other interactions, if these are the same and do not specify a cardinality. This fixes spockframework#962
I'm not so sure this simply can be "neglegted". If I got this right, it is a quite deep and subtle change. You for example currently weaken the rule that order of interactions is significant. If you for example have class Foo {
String foo(String foo) { null }
String bar(String bar) { null }
} and Foo foo = Mock {
_(_ as String) >> 'bar'
foo(_) >> 'foo'
_(_ as String) >> 'baz'
} then in the old logic With the new logic So I guess if we do such a change, at least the order should also adapt, so that the former interaction would be removed and not replaced by the override. |
Very good point, thanks! How about we change the override logic, that it only overrides, if the interaction originated from another scope/block. Similar to override methods in languages. |
To be honest, I'm totally unsure how to properly do it in a better and intuitive way. What would for example happen if you have class Foo {
String foo(String foo) { null }
String bar(String bar) { null }
}
Foo foo
def setup() {
foo = Mock {
_(_ as String) >> 'bar'
foo(_) >> 'foo'
}
}
def foo() {
with(foo) {
foo(_) >> 'baz'
_(_ as String) >> 'bam'
}
//...
} ? I also always wished But the more I think about it due to this PR, the more I consider whether the current way is fine. |
This is a breaking change, as I discussed in #321 we already have a way to override stubs. I agree, that is is not ideal, as most users try to override stubs in the In all the time the both issues "only" gathered 14 +1 votes. So, while there is some demand, it is not overwhelmingly high.
That is a good first indicator, but our testsuite is not exhaustive, and we maybe should add a test.
That is basically what happens if you add interactions to the |
Ok, shall I close that PR then? Also we should probably close the ticket #962 then. |
Closed this PR, because it does not really solve the issue in a satisfying way. |
The Interactions now allow to override other interactions, if these are the same and do not specify a cardinality.
This can possibly be a breaking change, when someone relies on the existing strange behavior, but I think this can be neglected.
None of the existing spock test in this repo broke.
This fixes #962