【发布时间】:2021-02-19 15:17:02
【问题描述】:
我有一个类,它的方法实例化了第二个类的元素:
class FirstClass:
def method_one():
second_class = SecondClass()
第二个类有一个带有默认参数的方法:
class SecondClass:
def method_two(important_date: datetime.date = get_today())
还有一个函数get_today在另一个文件date_service:
def get_today() -> datetime.date:
return datetime.date.today()
我正在test_first_class.py 中测试method_one,但我无法模拟get_today() 的值。
我查看了 SO 中的几个页面和解决方案,但无法修复它。一些想法:
- 我试过that,但在排队
with patch.object(build_url, 'func_defaults', ('domain',)):
我不知道我必须在build_url 上输入什么。我尝试了SecondClass.method_two 之类的方法,但它不起作用。
备注:我知道一个好的单元测试应该独立测试FirstClass 和SecondClass,并在test_first_class.py 中模拟method_two,但由于某些原因我不能这样做:-(
【问题讨论】:
-
如果您的程序运行到午夜,它可能会产生不良结果。
-
就我而言,这没什么大不了的,但我明白你的意思。哪个是解决方案?如果它持续到午夜,就没有办法避免潜在的不良后果,是吗?
-
你试过理解文档吗? docs.python.org/3/library/unittest.mock.html#patch-object(不是联合专家)
-
不要将第一天作为 am 参数默认值,而是使用
None作为默认值并在方法中处理它以始终获取最近一天。 -
哦@Klaus D.,你是对的!我没有考虑过默认参数只加载一次的事实!好的,我会改变它,然后我不需要那样模拟它。不过,我找到了一个解决方案,如果有人感兴趣,我会发布它。非常感谢您的评论!!!
标签: python pytest python-unittest