代码之家  ›  专栏  ›  技术社区  ›  Mayday

使用pytest mock避免python模块语句

  •  0
  • Mayday  · 技术社区  · 2 年前

    我在一个文件中有一些设置,这些设置从我的环境中读取:

    文件1.py

    set1 = os.getenv(...)
    
    SETTINGS = {
      key1: set1,
      ...
    }
    

    在另一个文件中,我正在导入它们:

    文件2.py

    from File1 import SETTINGS
    
    MyClass():
      ...
    

    在我的测试文件中,我正在嘲笑MyClass方法,然而,由于以前的导入,它正试图访问env-var。

    有没有我可以模拟File2导入?

    这是我的测试文件:

    测试.py

    from unittest.mock import patch
    import pytest
    
    from File2 import MyClass
    
    @patch.object(
        MyClass,
        "my_method",
        return_value=None,
    )
    def test_my_test(mock1):
      my_class = MyClass()
      ....
    

    总结 :如何避免在测试中使用os.getenv()?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Sayse    2 年前

    您可以在 conftest.py 该文件将允许您更接近实际代码进行测试。

    import os
    os.environ["var"] = "foo"