Как проверить методы python, которые включают datetime.now () для разных дат? - PullRequest
2 голосов
/ 22 октября 2019

У меня есть несколько методов, которые используют datetime.datetime.now() из библиотеки datetime. Я хочу написать модульные тесты для этих методов, как если бы now() несколько раз (например, 5-й день месяца, 15-й день месяца).

Например, допустим, у меня есть этот метод (на самом деле просто пример, у меня нет такого метода)

import datetime

def days_left_this_month():
    return 30 - datetime.datetime.now().day

Я бы хотел протестировать этот метод для5-й день месяца, т.е.: days_left_this_month() == 25, если now() - 5-й день месяца.

Каков наилучший способ сделать это?

1 Ответ

3 голосов
/ 22 октября 2019

Вы можете использовать freezegun:

from freezegun import freeze_time
import datetime
import unittest


@freeze_time("2019-10-05")
def test():
    assert datetime.datetime.now() == datetime.datetime(2019, 10, 05)

Например, для проверки days_left_this_month:

def days_left_this_month():
    return 31 - datetime.datetime.now().day

Мы можем:

@freeze_time("2019-10-05")
def test():
    assert days_left_this_month() == 26

def test_multiple():
    with freeze_time(x):
        assert days_left_this_month() == y
    with freeze_time(x):
        assert days_left_this_month() == y
    with freeze_time(x):
        assert days_left_this_month() == y
    with freeze_time(x):
        assert days_left_this_month() == y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...