Module objects are global! One in every of my favourite kinds of bugs is when a take a look at that appears entirely unrelated to a code change fails. I’ve educated myself to look for the widespread causes, normally having to deal with shared state on account of a test missing a correct teardown. But this week, I had a brand new form of failure, one to do with module objects and how Python’s import mechanism works, which, should you did not know, can also be certainly one of my favorite things. I’ve been experimenting with faker, a package for producing random cellphone numbers, e mail addresses, and so on, for use in assessments. My purpose was to have a wide surface area of cellphone numbers used throughout exams, but additionally for every test to make use of the identical phone number(s) every check run. Here, I’m seeding the Faker instance so we get the identical phone quantity for every call. Having to do this in the setup for each test, although, seemed like a variety of tedious work, and probably easy to neglect, so I needed to see if I may construct a nose plugin that will seed a Faker instance for me based on the hash of the check name.