Over the past year I've written the same test a few times.
(expect (interaction (my-fn anything) :never) (a-fn-that-shouldnt-call-my-fn))
This test accomplishes what I'm looking for when I write it - verification that my-fn isn't called. However, it doesn't prevent me from future regressions where my-fn is called with 0, 2, or 2+ arguments. After being bitten by this issue a few times I decided to add an argument matching function that will accept any value for the argument at it's index, and any value for all of the arguments at a greater index. This argument matching function is
The following example is similar to what's above, except any call to my-fn will result in a failure
(expect (interaction (my-fn anything&) :never) (a-fn-that-shouldnt-call-my-fn))
My original intent was to protect against the scenario I described above*; however, what I ended up with is actually flexible enough to allow me to test other situations as well. For example, I've often found myself testing that a log message was written at a certain level, but not being interested in testing the actual message. The logging I'm working with allows a variable number of arguments, so anything& is perfect for verifying that no matter what args are passed in, the tests passes as long as the level is set correctly.
(expect (interaction (log :warn anything&)) (log :warn "order" 1 "at" (time/now)))
anything& matching function gives me an extra bit of flexibility that can come in handy at times.
*which is similar to verifyZeroInteractions in mockito