Here is my Spock unit test:
def "when favorite color is red then doSomething produces empty list of things"() {
given:
FizzBuzz fizzBuzz = Mock(FizzBuzz)
fizzBuzz.name >> 'Dark Helmet'
fizzBuzz.attributes >> [:]
fizzBuzz.attributes["favcolor"] >> 'red'
fizzBuzz.attributes["age"] >> '36'
Something something = new Something(fizzBuzz)
when:
Whoah whoah = something.doSomething()
then:
!whoah.things
}
And here is the FizzBuzz
mock:
public interface FizzBuzz extends Serializable {
Map<String, Object> getAttributes();
}
When I run this I get:
java.lang.NullPointerException: Cannot invoke method rightShift() on null object
at com.commercehub.houston.SomethingSpec.when favorite color is red then doSomething produces empty list of things fail(SomethingSpec.groovy:18)
Process finished with exit code 255
The 'null object' its referring to on Line 18 is either fizzBuzz
or its attributes
map. Why?
You're attempting to use multiple levels of indirection, and the >>
is getting applied to the result of .attributes["favcolor"]
, which is null (since .attributes
is an empty map). Instead, just initialize the map:
fizzBuzz.attributes >> [favcolor: 'red', age: 36]
(Also, did you really mean age
to be a string?)
In my case, I realized I was accidentally declaring the result of the when
block.
when:
Whoah whoah = something.doSomething() >> expectedResult
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With