Python单元测试,日期时间

问题描述 投票:0回答:1

我的问题是:在我的后续测试中,今天一切正常,但明天将无法正常工作。我是一个初学者,并且尝试了很多选择,但是我失败了,我正在尝试通过“现在”作为参数,但直到现在都没有成功。我必须停止“ datetime.now()”并放置一个固定日期才能测试所有变体。直到这里我都有神的进步,但是我一直坚持你能帮我吗?谢谢。Flavio


import unittest
from datetime import datetime


def get_last_name_and_birthday(name, d):
    x = name.split()
    dob = d.split("-")
    year, month, day = int(dob[2]), int(dob[1]), int(dob[0])
    user_birthday = datetime(year, month, day)
    return x[-1], user_birthday


def calc_days(user_birthday):
    now = datetime.now()
    if user_birthday < now:
        birthday = datetime(now.year + 1, user_birthday.month, user_birthday.day)
        return (birthday - now).days + 1
    else:
        birthday = datetime(now.year, user_birthday.month, user_birthday.day)
        return (birthday - now).days + 1


def generate_output(last_name, cd):
    if cd == 365:
        return "Hello Mr " + last_name + " Happy Birthday"
    elif cd < 365:
        return "Hello Mr " + last_name + " your birthday is in " + str(cd) + " days"
    else:
        return "Hello Mr " + last_name + " your birthday is in " + str(cd - 365) + " days"


def process_name_and_birthday(name, dob):
    last_name, user_birthday = get_last_name_and_birthday(name, dob)
    cd = calc_days(user_birthday)
    return generate_output(last_name, cd)


#name = input("type your full name: ")
#dob = input("type your date of birthday(dd-mm-yy): ")
#print(process_name_and_birthday(name, dob))



class BirthdayTest(unittest.TestCase):
    def test_same_day_birthday(self):
        self.assertEqual("Hello Mr Oliveira Happy Birthday", process_name_and_birthday("Flavio Oliveira", "11-06-1990"))


class DaysToBirthdayTest(unittest.TestCase):
    def test_days_to_birthday(self):
        self.assertEqual("Hello Mr Oliveira your birthday is in 9 days", process_name_and_birthday("Flavio Oliveira", "20-06-1978"))


class DaysToPassedBirthdayTest(unittest.TestCase):
    def test_how_many_days_passed_birthday(self):
        self.assertEqual("Hello Mr Oliveira your birthday is in 364 days", process_name_and_birthday("Flavio Oliveira", "10-06-1978"))


unittest.main()



python testing python-unittest
1个回答
0
投票

在您导入的datetime下添加以下三行:

from unittest.mock import Mock
datetime = Mock(wraps=datetime)
datetime.now.return_value = datetime(2020, 6, 11, 20)

这里有关于mock模块的更多信息:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock

© www.soinside.com 2019 - 2024. All rights reserved.