python - 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
文件中的方法定义。
解决方案
您遇到的麻烦都是告诉您不要使用全局变量的迹象。特别是因为您使用的是函数参数的语言(即有一种方法可以让我传递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
推荐阅读
- android - 降低 Android 设备上的蓝牙信号强度
- angular - 延迟加载而不为模块添加路由段
- android - 添加新基准模块时同步失败
- ios - Xcode:iOS 应用程序突然总是在启动时崩溃
- python - python:解释如果列表:
- javascript - Opentok web 移动到 PC 方向
- c# - 迁移到 Asp.net core 3 改变了控制器响应?
- message-queue - ZeroMQ 消息队列
- laravel - 如何在当前用户中实现 setEagerLoads - Laravel
- c - C函数将函数作为参数传递,如何使用node-ffi包装这个函数?