如何为使用datetime的导入函数设置时间?

时间:2018-11-03 23:07:59

标签: python python-unittest

我正在尝试通过我的代码对此功能进行测试:

def name_of_file(filepath, url):
    first = url.netloc.replace('www.', '').replace('.com', '')
    second = url.path.split('/')[-1].replace('.html', '')[:40]
    filenamepath = "{}.csv".format(filepath + '/' + first + second + time)
    return filenamepath

time是从datetime.datetime.today()创建的字符串:

now = datetime.today()
sep = "-"
time = str(now.day) + sep + str(now.month) + "_" + str(now.hour) + sep + str(now.minute)

问题是我无法断言name_of_file和字符串之间的相等性,因为每次我的测试(使用unittest框架)调用name_of_file函数时,时间变量都会改变,因此字符串不相等。

如何在测试中传递或设置一个特定的datetime,以便在调用name_of_file函数时,我可以知道要获得的最终字符串(并通过测试)?

1 个答案:

答案 0 :(得分:0)

name_of_file()函数正在从代码中名为time的全局变量获取值的事实,这使得这一点很难解决。通过重新定义函数以使用此值接受附加参数,然后在调用它时将其作为参数传递给它,您应该能够避免该问题。

如果您无法更改name_of_file()函数和/或使用方式,那么可以使用unittest.mock库将datetime.today函数返回的值转换为常量。 ,就像@wowserx在评论中建议的那样。