[英]How can I raise this exception properly?
如何正確引發此異常?
import unittest
def second_digit_value4(n): return True if n % 10 == 4 else False
class DigitValue4(unittest.TestCase):
def test_last_digit_value4(self):
self.assertEqual(second_digit_value4(14), True)
self.assertFalse(second_digit_value4(22), False)
with self.assertRaises(ValueError):
second_digit_value4(23)
if __name__ == '__main__':
unittest.main()
由於該函數僅適用於 2 位數的正數,因此應檢查參數是否介於 10 和 99 之間。然后您應該使用該范圍之外的數字對其進行測試。
import unittest
def second_digit_value4(n):
if 10 <= n <= 99:
return n % 10 == 4
raise ValueError("number must be 2 digits")
class DigitValue4(unittest.TestCase):
def test_last_digit_value4(self):
self.assertEqual(second_digit_value4(14), True)
self.assertFalse(second_digit_value4(22), False)
with self.assertRaises(ValueError):
second_digit_value4(123)
if __name__ == '__main__':
unittest.main()
單元測試不需要拋出錯誤。 他們檢查事情是真是假,並根據結果,測試通過或失敗。
將您的測試修改為:
assertTrue(second_digit_value4(14), 'second_digit_value4 failed on 14')
assertFalse(second_digit_value4(22), 'second_digit_value4 failed on 22')
異常用於處理“意外”情況。 您可以將函數修改為:
def second_digit_value4(n):
if not n.isnumeric():
raise ValueError("value must be a number")
if 10 <= n <= 99:
return n % 10 == 4
else:
raise ValueError("value out of range")
然后檢查是否拋出異常:
def test1(self):
with self.assertRaises(ValueError):
second_digit_value4('This is NaN')
您可以為超出范圍的異常添加另一個測試。
它的作用是允許您的函數在不執行操作並返回結果的情況下返回,這在該輸入上是不可能的。
或者,您可以只返回 NaN 而不是拋出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.