gpt4 book ai didi

python - 为测试类中的所有测试处理相同的 Python 异常

转载 作者:行者123 更新时间:2023-11-28 20:51:38 25 4
gpt4 key购买 nike

类似于 setUp() 方法,有没有一种方法可以在一个地方定义如何为给定的 TestCase 测试类中的所有测试处理特定异常?

我的用例:mock/patch 的 assert_any_call 的堆栈跟踪只给出了它找不到的预期调用,但我想添加针对 mock 的实际调用。每个单元测试都可以在 except 子句中将此信息添加到堆栈跟踪中,但我希望它在一个地方定义以避免代码臃肿。

最佳答案

正如@Jérôme 所指出的,这可以通过创建一个装饰器来包装您的测试来实现(例如 https://stackoverflow.com/revisions/43938162/1 )

这是我最终使用的代码:

import mock
from unittest import TestCase
from foo.bar import method_that_calls_my_class_method


def _add_mock_context(test_func):
"""This decorator is only meant for use in the MyClass class for help debugging test failures.
It adds to the stack trace the context of what actual calls were made against the method_mock,
without bloating the tests with boilerplate code."""
def test_wrapper(self, *args, **kwargs):
try:
test_func(self, *args, **kwargs)
except AssertionError as e:
# Append the actual calls (mock's exception only includes expected calls) for debugging
raise type(e)('{}\n\nActual calls to my_method mock were:\n{}'.format(e.message, self.method_mock.call_args_list))
return test_wrapper


class TestMyStuff(TestCase):
def setUp(self):
class_patch = mock.patch('mine.MyClass', autospec=True)
self.addCleanup(class_patch.stop)
class_mock = class_patch.start()
self.method_mock = class_mock.return_value.my_method

@_add_mock_context
def test_my_method(self):
method_that_calls_my_class_method()
self.method_mock.assert_any_call(arg1='a', arg2='b')
self.method_mock.assert_any_call(arg1='c', arg2='d')
self.method_mock.assert_any_call(arg1='e', arg2='f')
self.assertEqual(self.method_mock.call_count, 3)

关于python - 为测试类中的所有测试处理相同的 Python 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44272026/

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