gpt4 book ai didi

python - 如果在单元测试中则跳过 python 中的代码

转载 作者:行者123 更新时间:2023-11-30 22:11:54 24 4
gpt4 key购买 nike

我当前的脚本调用外部脚本来执行某些任务。我想在单元测试中检查到目前为止的代码,但实际上不运行外部脚本。如果代码作为单元测试的一部分运行,是否有某种方法可以告诉脚本有效地跳过以下 block ?

最佳答案

unittest 包对“模拟”函数和方法有广泛的支持。将对外部程序的调用封装在一个简单的函数中,您的单元测试可以覆盖(“模拟”),而无需修改程序的结构。示例:

这是您的程序的一部分,位于模块 realcode.py

def internal_function_calling_exec(arg1):
"""The real thing"""
print("I am executing an external program")


def bigger_function_being_tested(arg1, arg2):
"""
A complex function with one or more calls to `internal_function_calling_exec`
"""
print("I will now call `internal_function_calling_exec()`")
internal_function_calling_exec(42)

您的单元测试可以如下所示:

import unittest
from unittest.mock import patch
import realcode

class MyTest(unittest.TestCase):

@patch("realcode.internal_function_calling_exec")
def test_something(self, mocked_func):
realcode.bigger_function_being_tested(1, 2)
mocked_func.assert_called_with(42)

这永远不会调用原始的internal_function_calling_exec()。相反,这将触发对模拟对象的调用;然后,您的测试可以查询该对象以确认它被正确调用。

有多种方法可以模拟类方法等,因此您可以例如模拟 subprocess.call 。但我认为上面是更好的模式。

关于python - 如果在单元测试中则跳过 python 中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51279802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com