The following test shows how you can specify an expected interaction. This test passes.
Writing the test should be straightforward - expect the interaction and then call the code that causes the interaction to happen.
As I was adding this behavior I enhanced the error reporting. Below you can find a failing test and the output that is produced.
As you can see, all three calls to the 'one' function are reported. If the number of args used to call 'one' are of the same size as the expected args, each arg is compared in detail; otherwise the two lists are compared in detail (but the elements are not).
As you can see in this failure the first argument, "hello", matches.
; got: (one "hello" {2 3, :a 1}) ; arg1: matches ; expected arg2: {:a :b, :c {:ff :gg, :dd :ee}} ; actual arg2: {2 3, :a 1} ; 2 with val 3 is in actual, but not in expected ; :c {:dd with val :ee is in expected, but not in actual ; :c {:ff with val :gg is in expected, but not in actual ; :a expected: :b ; was: 1Anytime an argument matches expectations will simply print "matches". You can also specify :anything as an argument, to ignore that argument and always 'match'. The following test shows an example of matching the second argument, while the first argument is no longer matching.
That's it. Hopefully these interaction tests follow the principle of least surprise, and are easy for everyone to use.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.