在这种情况下如何使用 assertRaisesRegex?
How to use assertRaisesRegex in this situation?
我正在尝试使用 assertRaisesRegex
(来自 unittest 模块)来确保在执行以下分配时引发异常(来自我们的 C++ 后端):
a[:, 0] = b[:, 0]
a
和 b
这里是我们后端定义的自定义类型。
在我看到使用 assertRaisesRegex
的情况下,函数及其参数被传递给 assertRaisesRegex
,但在这种情况下,我需要测试在上述过程中是否引发了异常任务。我怎样才能最好地做到这一点而不必编写额外的函数来完成分配?
import unittest
class SomeSpecificError(Exception):
pass
class OtherError(Exception):
pass
class FakeData:
def __getitem__(self, key):
raise SomeSpecificError(f"can't get slice {key!r}")
class MyTestCase(unittest.TestCase):
def test(self):
a = FakeData()
b = FakeData()
with self.assertRaisesRegex(SomeSpecificError, "can't get slice"):
a[:, 0] = b[:, 0]
# passes
with self.assertRaisesRegex(SomeSpecificError, "something something"): #
a[:, 0] = b[:, 0]
# fails:
# AssertionError: "something something" does not match "can't get slice (slice(None, None, None), 0)"
with self.assertRaisesRegex(OtherError, "something something"): #
"no exception raised in this block"
# fails:
# AssertionError: OtherError not raised
显然,将我的 FakeData
替换为您自己的实际 class,我的用于测试(如模拟)。
我正在尝试使用 assertRaisesRegex
(来自 unittest 模块)来确保在执行以下分配时引发异常(来自我们的 C++ 后端):
a[:, 0] = b[:, 0]
a
和 b
这里是我们后端定义的自定义类型。
在我看到使用 assertRaisesRegex
的情况下,函数及其参数被传递给 assertRaisesRegex
,但在这种情况下,我需要测试在上述过程中是否引发了异常任务。我怎样才能最好地做到这一点而不必编写额外的函数来完成分配?
import unittest
class SomeSpecificError(Exception):
pass
class OtherError(Exception):
pass
class FakeData:
def __getitem__(self, key):
raise SomeSpecificError(f"can't get slice {key!r}")
class MyTestCase(unittest.TestCase):
def test(self):
a = FakeData()
b = FakeData()
with self.assertRaisesRegex(SomeSpecificError, "can't get slice"):
a[:, 0] = b[:, 0]
# passes
with self.assertRaisesRegex(SomeSpecificError, "something something"): #
a[:, 0] = b[:, 0]
# fails:
# AssertionError: "something something" does not match "can't get slice (slice(None, None, None), 0)"
with self.assertRaisesRegex(OtherError, "something something"): #
"no exception raised in this block"
# fails:
# AssertionError: OtherError not raised
显然,将我的 FakeData
替换为您自己的实际 class,我的用于测试(如模拟)。