Since the param is required, shouldn't it blow up with an ArgumentError before the merge is ever called?  If a param is passed in that is not a hash the merge will blow up, so I probably need to test that edge case, but defaulting param to an empty hash wouldn't matter in that case.

Is it good practice to create unit tests that the parameters passed in to a are of the right type? Or is that locking you down to an implementation?