from unittest.mock import MagicMock
thing = ProductionClass()
thing.method = MagicMock(return_value=3)
thing.method(3, 4, 5, key='value')
3
thing.method.assert_called_with(3, 4, 5, key='value')
Somehow that would be my expectation (literally coming from the Gomega background) that I can more flexibly do complex sequences on the mock without having to tell the mock the complete sequence beforehand. I personally like this unittest.mock style because it allows me to do a step-wise assertion/expectation approach that gives me more fine-grained reporting in case of assertion failure. Otherwise, it's a big mess and I need to sort out where exactly it started to go south.
Now this is probably more specific to my field of Go work, but I regularly have more complex unit tests that cannot really be sensibly spread into many individual -- to use Ginkgo terminology -- "It" leaf test nodes.
Coming from the Python ecosystem and starting seriously with Go 1.11/Go 1.12 when modules finally landed, I personally found the std testing to be very bare bones (which is fine considering the Go mantra here). So I looked what the really huge projects do, and this was in my case k8s :D -- I liked immediately what they used, as it was a comparably logical transition from Python expectation packages to Gomega and Ginkgo.
Disclaimer: I contributed the Go routine leak checker to Gomega after coming to the conclusion that the incredibly useful Uber go routine leak checker was too deeply intertwined with testing and couldn't be conveniently reused in Gomega.