簡體   English   中英

在這種情況下如何使用 assertRaisesRegex?

[英]How to use assertRaisesRegex in this situation?

我正在嘗試使用assertRaisesRegex (來自 unittest 模塊)來確保在執行以下分配時引發異常(來自我們的 C++ 后端):

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

ab這里是我們后端定義的自定義類型。

在我看到使用assertRaisesRegex的情況下,將 function 及其 arguments 傳遞到assertRaisesRegex ,但在這種情況下,我需要測試在上述分配期間是否引發了異常。 我怎樣才能最好地做到這一點,而不必編寫額外的 function 來完成作業?

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

顯然,用你自己的實際 class 替換我的FakeData ,我的用於測試(就像一個模擬)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM