Creating the String early is better than cloning or serialization, but even if just done for targets of method/property calls, it's still quite costly. (Consider an assertion on a large collection.) Not sure what to do about this. One option is to document it as a known limitation and tell people not to write side-effecting assertions (or live with the consequences). That's what I'm considering to do for Spock (where this hasn't been reported so far).