[英]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.