您如何測試Python函數引起異常?

如何編寫僅在函數未引起預期異常的狀況下失敗的單元測試? less


#1樓

看一下unittest模塊的assertRaises方法。 函數


#2樓

使用unittest模塊中的TestCase.assertRaises (或TestCase.failUnlessRaises ),例如: 單元測試

import mymod

class MyTestCase(unittest.TestCase):
    def test1(self):
        self.assertRaises(SomeCoolException, mymod.myfunc)

#3樓

您的代碼應遵循如下模式(這是一個unittest模塊樣式測試): 測試

def test_afunction_throws_exception(self):
    try:
        afunction()
    except ExpectedException:
        pass
    except Exception:
       self.fail('unexpected exception raised')
    else:
       self.fail('ExpectedException not raised')

在Python <2.7上,此構造對於檢查預期異常中的特定值頗有用。 unittest函數assertRaises僅檢查是否引起了異常。 spa


#4樓

我上一個答案中的代碼能夠簡化爲: 命令行

def test_afunction_throws_exception(self):
    self.assertRaises(ExpectedException, afunction)

若是函數接受參數,則將它們傳遞給assertRaises,以下所示: code

def test_afunction_throws_exception(self):
    self.assertRaises(ExpectedException, afunction, arg1, arg2)

#5樓

我幾乎在全部地方都使用doctest [1],由於我喜歡同時記錄和測試函數的事實。 ip

看一下這段代碼: 文檔

def throw_up(something, gowrong=False):
    """
    >>> throw_up('Fish n Chips')
    Traceback (most recent call last):
    ...
    Exception: Fish n Chips

    >>> throw_up('Fish n Chips', gowrong=True)
    'I feel fine!'
    """
    if gowrong:
        return "I feel fine!"
    raise Exception(something)

if __name__ == '__main__':
    import doctest
    doctest.testmod()

若是將此示例放在模塊中並從命令行運行它,則將評估並檢查兩個測試用例。 get

[1] Python文檔:23.2 doctest-測試交互式Python示例

相關文章
相關標籤/搜索