gpt4 book ai didi

python - 在测试中模拟特定方法不起作用

转载 作者:行者123 更新时间:2023-11-28 18:56:09 25 4
gpt4 key购买 nike

我使用的是 Python 3.5.2。我试图在不同的测试用例下模拟相同的方法,但似乎 sys.argv 没有被模拟。

我也尝试过使用 @patch 装饰器来代替,但无济于事。

main.py:

from os import path
from sys import argv

globals = {}

def get_target_dir():
if len(argv) < 2 or not path.exists(argv[1]):
print("You must specify valid full path of instances directory as command line argument.")
exit(1)
globals['TARGET_DIR'] = argv[1] + ('/' if argv[1][-1] != '/' else '')

测试.py:

import unittest
from unittest.mock import patch
from main import get_target_dir, globals

class TestMain(unittest.TestCase):
def test_correct_target_dir(self):
argv = [None, '/test']
with patch('sys.argv', argv), patch('os.path.exists', lambda _: True):
get_target_dir()
assert globals['TARGET_DIR'] == argv[1] + '/'

def test_invalid_target_dir(self):
argv = [None, '/']
with patch('sys.argv', argv), patch('os.path.exists', lambda _: False):
try:
get_target_dir()
except SystemExit:
assert True
else:
assert False

当我运行测试时,由于上述问题,它们没有按预期工作。

最佳答案

我意识到我不知道 gotchas ,所以我在 main.py 中错误地包含了 sys.argv 方法 - 在将 import from sys import argv 替换为 import sys 之后(并进一步将 sys. 放在代码中的 argv 之前)一切都开始工作了。

关于python - 在测试中模拟特定方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710386/

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