It's not unusual for people, even developers, to think of unit testing as a process of making sure that bugs aren't present in a code base. While there is a fair amount of truth to that, at least in smaller code bases, that's actually more a result of the real purpose behind unit testing: unit testing is about ensuring that code behaves in a predictable fashion across all reasonably possible execution cases. The difference can be subtle, but it's still a significant one.
Let's take another look at the preceding my_function, this time from a unit testing perspective. It's got three arguments, one that is a required string value, one that is a required number value, and one that is an optional string value. It makes no decisions ...