首页 > 解决方案 > Pytest:测试具有不同全局变量的方法

问题描述

我正在为该方法使用全局变量的脚本编写 pytest。在为脚本编写测试方法时,我想将 DUMMY 全局变量(即 2)而不是原始值(即 55)传递给它。所以我写了一个脚本(见下文),但这导致了我的失败。

# script1.py

VAL = 55
def add_one():
   return VAL+1

上述脚本的 Pytest 脚本:

# test_script1.py

import pytest
from script1 import add_one

DUMMY_VAL = 2

@pytest.mark.parametrize("VAL", DUMMY_VAL)
def test_add_one():
    expected_output = 3
    observed_output = add_one()
    assert observed_output == expected_output

但是上面的测试脚本失败了,因为它使用 VAL55而不是2. 所以我的问题是,有没有一种方法可以传递DUMMY_VAL给测试方法以通过我的测试用例。此外,还有一个条件:我不想更改script.py文件中的方法定义。

标签: pythonunit-testingpytest

解决方案


您遇到的麻烦都是告诉您不要使用全局变量的迹象。特别是因为您使用的是函数参数的语言(即有一种方法可以让我传递DUMMY_VAL)。

话虽如此,您可以使用类似的方式修补变量 - 您只需要以可以访问导入模块的方式进行导入:

from unittest.mock import patch
import script1

DUMMY_VAL = 2


@patch('script1.VAL', DUMMY_VAL)
def test_add_one():
    expected_output = 3
    observed_output = script1.add_one()
    assert observed_output == expected_output

推荐阅读