0

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

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

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

在我见过的情况下assertRaisesRegex,将一个函数及其参数传递给assertRaisesRegex,但在这种情况下,我需要测试在上述分配期间是否引发了异常。我怎样才能最好地做到这一点,而不必编写额外的函数来完成作业?

4

1 回答 1

1
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用您自己的实际课程代替我的课程,我的课程用于测试(如模拟)。

于 2022-01-26T11:43:30.573 回答