Ryan Tandy created GROOVY-9932: ---------------------------------- Summary: MockFor/StubFor makes mocked internal method return null Key: GROOVY-9932 URL: https://issues.apache.org/jira/browse/GROOVY-9932 Project: Groovy Issue Type: Bug Affects Versions: 3.0.7 Reporter: Ryan Tandy
{code:groovy} import groovy.mock.interceptor.StubFor class Helper { String string Helper() { string = method() } String method(String arg) { return 'test' } } StubFor stub = new StubFor(Helper) stub.demand.method { String arg -> return 'stub' } stub.ignore('getString') stub.use { Helper helper = new Helper() assert helper.string == 'stub' } {code} {{method()}} is a public method, thus I expect it to respect mocking, even for internal calls. Let me know if this expectation is wrong. With Groovy 2.4.21, the test works as expected. With Groovy 3.0.7, it fails: {noformat} Assertion failed: assert helper.string == 'stub' | | | | null false Helper@5c00384f at test$_run_closure2.doCall(test.groovy:17) at test$_run_closure2.doCall(test.groovy) at test.run(test.groovy:15) {noformat} Instead of either the original or mocked return value, we got {{null}} instead. It looks like it works for {{call()}}, but not for {{callCurrent()}}. I think the issue is that MockProxyMetaClass overrides one signature of {{invokeMethod()}}, but not the one used by {{callCurrent()}}. Might [34ad466ba6a|https://github.com/apache/groovy/commit/34ad466ba6a] be a relevant change? -- This message was sent by Atlassian Jira (v8.3.4#803005)