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:

Found an issue in documentation? Write to us.