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

How to set time for imported function that uses datetime?

我正在尝试从我的代码中对此函数进行测试:

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 函数时,我可以知道我将获得的最终字符串(从而通过测试)?

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

如果您无法更改 name_of_file() 函数 and/or 的使用方式,那么 datetime.today 函数 returns 的值可以通过使用 unittest.mock 库,正如@wowserx 在评论中所建议的那样。