【发布时间】:2019-11-27 09:37:44
【问题描述】:
我有模块report_generator.py,
from datetime import datetime
def prepart_report():
# some code to generate report
report_name = 'my_report_{}.xlsx'.format(started_at)
if __name__ == '__main__':
started_at = datetime.now()
log_file_name = 'my_repot_{}.log'.format(started_at)
'started_at' 用于日志文件名和报告文件名的全局变量。
测试模块test_report_generator.py,
import report_generator
class TestReportGenerator(unittest.TestCase):
def test_prepare_report(self):
started_at = datetime.now()
with path.object(report_generator, 'started_at', started_at):
report_generator.prepare_report()
在测试用例中,我正在尝试修补 started_at 变量。我收到 module does not have attribute 'started_at' 错误。错误的原因是当我在测试用例模块中导入我的模块时,模块 __ name__ 不会是 "__ main__"。那么,我该如何修补这个或者为此编写测试用例的最佳方法是什么,
以下我通过谷歌搜索找到的解决方案,
- 我可以将“started_at”移出 __ main__ 块
- 使用 imp 模块导入我的模块。 stackoverflow
- 我可以发送started_at 作为函数参数,
def prepart_report(started_at=started_at): - stackoverflow link
【问题讨论】:
-
如果能改正源代码中的错别字就好了(比如
strated_at) -
@blues 已更新。
标签: python unit-testing mocking