I had a lot of tricky tests to write today that needed mocks against an async SDK.
To get started, I tried out GitHub Copilot "generate tests".
Observations:
=> More informations about this toot | More toots from pamelafox@fosstodon.org
So I eventually modified most tests to "my style" with monkeypatch.setattr whenever possible.
I'm still grateful for Copilot's help since:
=> More informations about this toot | More toots from pamelafox@fosstodon.org
I'm curious what style mocks y'all prefer! should i be magic mocking more??
=> More informations about this toot | More toots from pamelafox@fosstodon.org
@pamelafox
I definitely prefer custom mocks in most cases - magic mocks work when everything is totally unit-ized and so you want to assume nothing about the components surrounding the thing to be tested, but in practice, if you can't actually use the thing in testing, it's good to have at least some imitation of its real behavior, because otherwise you're usually testing nothing
=> More informations about this toot | More toots from jonny@neuromatch.social
@pamelafox
I mean I assume you know more than me, but since you asked!
Also im not saying to not magic mock, it's just for a different situation than the ones I usually run into where I need a mock. More a "when I write tests I usually write the mocks" than a "dont use magicmock"
=> More informations about this toot | More toots from jonny@neuromatch.social
@jonny Okay yeah that makes sense. I think I prefer tests that aren't as clean in terms of "unit-ization" since that gives me additional opportunities to discover issues? Also better type hinting in my tests, since you cant get type hints from Magic mocks. Thanks for sharing your take!
=> More informations about this toot | More toots from pamelafox@fosstodon.org
@pamelafox I’ve done a lot of mocking in Python and other langs and I am changing my practice. Beyond specific types of fault injection or obscure branch behavior checks, I want to be using fakes. A lot of rework in my past could have been avoided if I wrote my tests as integration tests against multiple modules rather than unit tests a function at a time. I am now trying to enable that through accurate behavior fakes at the right levels of my applications so the tests work against a “real” flow of the code (like using moto instead of MagicMock). The Google SDEV handbook has a good section on testing that speaks to this philosophy (it’s a little over-declarative and chest thumping, and written for a Java shop, but the discussion has a lot of insights)
=> More informations about this toot | More toots from joshrivers@techhub.social This content has been proxied by September (ba2dc).Proxy Information
text/gemini