FAQ

FAQ

Is it possible to inject own method implementation using Groovy reflection?

Q: I often see a situation where an easy test can be written but there are several internal methods calls inside the tested methods which need lots of mocked objects to be created. If I could mock those internally called methods that would help me a lot to be really focused on the main issue.

Groovy is a dynamic language so it should be possible. I was trying to do it using metaclass.methodName overriding but unsuccessfully. I don't have access to the TDD4C library source code, so I don't know if the tested class can be edited this way:

def script = testRun.getElementScript() script.methodToBeOverriden = { return "test" } script.testedMethod()

 

String testedMethod(){ def property = methodToBeOverriden() if (property == "test"){ //do complicated logic }

 

A: You can use spy() on testRun.getElementScript() and mock the method like you would do in Java, e.g.:

given: TestRun testRun = TestRun.builder() .buildElementTest(LOGIC_DIR, ELEMENT_NAME) Script script = spy(testRun.getElementScript()) script.someInternalMethod(any(), any()) when: def result = script.someTestedMethod()

 

Beginner's FAQs

I would like to do X rather than this!

No please. https://8thlight.com/blog/uncle-bob/2012/01/11/Flipping-the-Bit.html

We don't have time do do this!

No one has.

Really?

Yes.

How to explain that this might be useful?

Feel free to use these slides: