在这种情况下如何使用assertRaisesRegex



我正在尝试使用assertRaisesRegex(来自单元测试模块(来确保在执行以下分配时引发异常(来自C++后端(:

a[:, 0] = b[:, 0]

这里的ab是在我们的后端中定义的自定义类型。

在我看到使用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,我的类用于测试(就像mock一样(。

相关内容

  • 没有找到相关文章

最新更新