How to mock/set system date in pytest?

前端 未结 3 1606
南方客
南方客 2021-02-19 07:13

In some of my tests I am having a problem that they fail on Travis because of time and time zone problems, so I want to mock system time for my test. How can I do this?

3条回答
  •  生来不讨喜
    2021-02-19 07:30

    AFAIK, you can't mock builtin methods.

    One approach I have often done is to change my code a bit to not use datetime directly to obtain the date, but a wrapper function somewhere:

    # mymodule.py
    
    def get_today():
       return datetime.date.today()
    

    This makes it trivial to just mock it in your test:

    def test_something():
        with mock.patch('mymodule.get_today', return_value=datetime.date(2014, 6, 2)):
            ...
    

    You can also use the freezegun module.

提交回复
热议问题