gpt4 book ai didi

python - 单元测试 : assert exception-handling function called

转载 作者:行者123 更新时间:2023-12-05 07:34:14 26 4
gpt4 key购买 nike

我有一个自定义异常处理函数,它允许打印错误消息而不是在需要时引发异常。我想断言它在边缘情况下被调用。

如果我在异常处理程序中引发异常,

with pytest.raises(Exception) 会按预期工作。在打印 pytest.raises 的情况下,断言将失败。

我尝试修补异常处理程序并断言它已被调用但断言失败,说它没有被调用。

def the_function(sth):
try:
do something with sth
except Exception:
exception_handler("err_msg", print=False)

def exception_handler(err_msg, print=False):
if print is True:
raise exception
print(err_msg)

# in testcase file
class Test_the_function(unittest.TestCase):
@patch('exception_handler_resides_here.exception_handler')
def test_function_calls_exception_handler(self, mock):
the_function(sth_bad)
self.assertTrue(mock.called)

我测试了用于断言一个函数是否在另一个函数中被调用的语法。

任何关于我应该如何处理这个的帮助将不胜感激。

Edit: To clarify, I'm trying to test the performance of the_function, not whether exception_handler can be called

最佳答案

Chepner is right

这个说法是正确的。

self.assertTrue(mock.called)

mock.called 确实返回 True/False

这显示了 mock 的工作原理。

import mock
mocked = mock.Mock()
mocked.methods.called
False
mocked.methods()
<Mock name='mock.methods()' id='139652693478928'>
mocked.methods.called
True

这里是通过给exception_handler打补丁来测试the_function。

import unittest
import mock
def handler_side_effect(sth):
exception_handler("err_msg", to_print=True)


def the_function(sth):
try:
sth.pop()
except Exception:
exception_handler("err_msg", to_print=False)


def exception_handler(err_msg, to_print=False):
if to_print is True:
raise Exception('aaa')
print(err_msg)


class Test_the_function(unittest.TestCase):

@mock.patch('python2_unittests.test_called.exception_handler')
def test_the_function(self, mocked_handler):
# no exception
the_function([1])
self.assertFalse(mocked_handler.called)

# with exception, but will not be raised
the_function(None)
self.assertTrue(mocked_handler.called)

# force to trigger a raise Exception
mocked_handler.side_effect = handler_side_effect
with self.assertRaises(Exception):
the_function(None)

关于python - 单元测试 : assert exception-handling function called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255129/

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