簡體   English   中英

在單元測試中使用errno和assertRaises

[英]Using errno with assertRaises in Unit Test

我在單元測試中使用assertRaises來測試特定異常的引發。

assertRaises(IOError, testToRun, passedValues)

雖然我需要捕獲的一些異常具有特定的錯誤號(錯誤號),因此我不想收集基本異常,而是想捕獲與該異常相關的特定錯誤號。 像這樣的東西,雖然它顯然不起作用:)

assertRaises(IOError.errno(2), testToRun, passedValue)

為了解決這個問題,當我想捕獲我一直在使用的特定編號的例外時: -

try:
    testToRun(passedValues)
except IOError, e:
    if e.errno == 2:
        pass
    else:
        raise

我敢肯定它並不完美,但它確實有效,但是想知道是否有可能使用assertRaises做同樣的事情是一種更緊湊的方式。

謝謝。

從2.7開始,可以將assertRaises與上下文管理器一起使用:

with self.assertRaises(SomeException) as cm:
    do_something()

the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)

您還可以使用當前代碼創建一個新的TestCase函數:

def assertRaisesErrNo(self, exc, errno, f, *args, **kwargs):
    try:
        self.assertRaises(exc, f, *args, **kwargs)
    except IOError, e:
        if e.errno == errno:
            pass
        else:
            raise

unittest.TestCase.assertRaisesErrNo = assertRaisesErrNo

然后像任何其他assert方法一樣使用它:

class TestSomething(unittest.TestCase):
    def test_somthing(self):
        self.assertRaisesErrNo(IOError, 2, myfunction)

您還可以使用contextlib.contextmanager將此變為上下文管理器

暫無
暫無

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

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