这是我的代码,我想在其中测试validate_yaml
函数(我删除了函数体,因为它们根本不需要(:
yaml_file_name = "env.yaml"
def load_yaml(file: str) -> list:
pass
def validate_yaml(env_list: list):
pass
def yaml_to_env(env_list: list):
pass
env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)
这是我的测试文件:
import pytest
import jsonschema
from yaml_to_env import load_yaml, validate_yaml
@pytest.mark.parametrize(
"invalid_yaml",
[
(load_yaml("tests/yaml_files/invalid_workload_type.yaml")),
],
)
def test_yaml_env(invalid_yaml):
with pytest.raises(jsonschema.ValidationError):
validate_yaml(invalid_yaml)
我的问题是,当我运行pytest
时,最后三行也会被执行:
env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)
为什么要这么做?我只想测试validate_yaml
函数,而不是在pytest
期间调用这三行。
提前感谢
[编辑1]
这是迄今为止我发现的最好的解决方案:
if __name__ == "__main__":
env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)
您的编辑正是您在这里需要做的。在您之前的尝试中,该代码已在测试文件中的生产代码的import
期间执行。这不是pytest的问题,而是python的基本模块结构。有关详细信息,请参阅此链接:如果__name__=="__main__":做简短答案中的第一点似乎是你做了什么