In the link you cited, the author somewhat rejects the idea of adding additional parameters to your methods for unit testing, but in some cases, I think that you can justify this as simply expanding your business logic. In my opinion, this is a form of control inversion that can make your model more flexible and, perhaps, even more expressive. For example:
def is_expired(self, check_date=None):
_check_date = check_date or datetime.utcnow()
return self.create_date + timedelta(days=15) < _check_date
Essentially, this allows my unit test to provide its own date / time for checking my logic.
, , , API. , , / . , .