Table of Contents | ||
---|---|---|
|
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:
Code Block |
---|
def script = testRun.getElementScript()
script.methodToBeOverriden = { return "test" }
script.testedMethod() |
Code Block |
---|
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.:
Code Block |
---|
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:
View file | ||||
---|---|---|---|---|
|