В предоставленной вами ссылке автор несколько отвергает идею добавления дополнительных параметров в ваши методы ради модульного тестирования, но в некоторых случаях я думаю, что вы можете обосновать это как расширение вашей бизнес-логики. На мой взгляд, это форма инверсии управления, которая может сделать вашу модель более гибкой и, возможно, даже более выразительной. Например:
def is_expired(self, check_date=None):
_check_date = check_date or datetime.utcnow()
return self.create_date + timedelta(days=15) < _check_date
По сути, это позволяет моему модульному тесту указывать собственную дату / время для проверки моей логики.
Аргумент в ссылочном блоге, похоже, состоит в том, что это портит API. Однако я сталкивался с ситуациями, в которых production использовались сценарии, требующие замены текущей даты / времени альтернативным значением. Другими словами, инверсионный подход управления в конечном итоге стал необходимой частью моего приложения.