Python 单元测试:如何为 sys.argv 引发 IndexError?
Python unittest: How to raise IndexError for sys.argv?
我正在尝试测试正在执行的脚本中的参数数量少于三个的情况。调试时,我看到 IndexError 发生了,但由于某种原因 assertRaises 没有“看到”它。
谁能帮忙解决这个问题?
my_file.py:
def my_func():
try:
sys.argv[2]
except IndexError:
pass
text_sys_srgv.py
import sys
import unittest
import my_file
from unittest.mock import patch
class TestServer(unittest.TestCase):
def test_my_func(self):
work_dir = os.path.dirname(os.getcwd())
my_file_full_path = os.path.join(work_dir, 'my_file.py')
test_args = [my_file_full_path, 'arg1']
with patch.object(sys, 'argv', test_args):
self.assertRaises(IndexError, my_file.my_func)
if __name__ == '__main__':
unittest.main()
您的 my_func
没有引发异常。它抓住了它。 assertRaises
将确认异常是否真的从函数中抛出,而不是在函数内部捕获并抑制。
我正在尝试测试正在执行的脚本中的参数数量少于三个的情况。调试时,我看到 IndexError 发生了,但由于某种原因 assertRaises 没有“看到”它。 谁能帮忙解决这个问题?
my_file.py:
def my_func():
try:
sys.argv[2]
except IndexError:
pass
text_sys_srgv.py
import sys
import unittest
import my_file
from unittest.mock import patch
class TestServer(unittest.TestCase):
def test_my_func(self):
work_dir = os.path.dirname(os.getcwd())
my_file_full_path = os.path.join(work_dir, 'my_file.py')
test_args = [my_file_full_path, 'arg1']
with patch.object(sys, 'argv', test_args):
self.assertRaises(IndexError, my_file.my_func)
if __name__ == '__main__':
unittest.main()
您的 my_func
没有引发异常。它抓住了它。 assertRaises
将确认异常是否真的从函数中抛出,而不是在函数内部捕获并抑制。