如何在“if __name__ == '__main__'”中模拟.patch 变量

约翰·普拉温

我有模块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变量。我收到模块没有属性“started_at”错误。错误的原因是当我在测试用例模块中导入我的模块时__ name__不会是"__ main__"那么,我该如何修补这个或者为此编写测试用例的最佳方法是什么,

按照我通过谷歌搜索找到的解决方案,

  1. 我可以将“started_at”移出 __ main__ 块
  2. 使用 imp 模块导入我的模块。堆栈溢出
  3. 我可以发送started_at作为函数参数, def prepart_report(started_at=started_at):
  4. 堆栈溢出链接
蓝调

由于该属性不存在,您可以设置它。

import report_generator

class TestReportGenerator(unittest.TestCase):
    def test_prepare_report(self):
        started_at = datetime.now()
        report_generator.started_at = started_at
        report_generator.prepare_report()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在IPython中__name__ =='__main__'

如何在Python模块中定义__name__变量?

如何测试或模拟“如果__name__ =='__main__'”内容

__name__ ==“ __main__”怎么办?

如何在MySQL中模拟数组变量?

在Python中调用getLogger之前,是否需要显式检查__name__ ==“ __main__”?

如果__name__ =='__main__'不起作用ipython

如何在__main__中创建一个变量,以供同一文件中定义的web.py类使用?

如果__name__ =='__main__'函数调用

django KeyError:“'__ name__'不在全局变量中”

在C ++中模拟__name__ == __main__是否导致错误“未定义类似函数的宏”

在Python multiprocessing.Process中,我们是否必须使用`__name__ == __main__`?

if __name__ ==“ __main__”的位置:

如何在带有if __name __ ='__ main__'块的Python3中使用相对导入?

为什么不将__name__ =='__main__'放在模块的开头?

python if __name__ ==“ __main__”:IndentationError:预期为缩进块

如何从另一个python文件中的`if __name__ ==“ __main __”`中执行代码

如何访问__main__范围内的全局变量?

使用python-multiprocessing与if __name__ =='__main__'相关的谜

多处理中__main__外部变量与内部变量的定义

如果__name__ ==“ __main__”条件(带烧瓶/弹性豆茎)

__name__如何在python装饰器中更改

Pycharm“Python 控制台”中的 exec(open) 函数不执行“if __name__ == '__main__”块

使用 if __name__ == "__main__" 从其他文件调用函数:

将多个参数传递给 Python __name__=="__main__"

如何使用 if __name__ == '__main__':

来自 if __name__ == "__main__" 的返回语句

如何启动 __name__ == '__main__': 使用来自另一个 .py 文件的特定输入?

替代 if __name__ == '__main__':