当尝试对argparse中的参数进行Unittest验证时,以下工作是:
mymodule:
def validate_mac_addr(mac_addr):
regex = re.compile(r'^((([a-f0-9]{2}:){5})|(([a-f0-9]{2}-){5}))[a-f0-9]{2}$', re.IGNORECASE)
if re.match(regex, mac_addr) is not None:
return mac_addr
msg = f"[-] Invalid MAC address: '{mac_addr}'"
raise argparse.ArgumentTypeError(msg)
测试:
import mymodule
import unittest
def test_mac_address_false(self):
self.assertRaises(Exception, mymodule.validate_mac_addr,"n0:ma:ca:dd:re:ss:here")
但我想捕捉一个更具体的"ArgumentTypeError",但在本例中,使用arssertRaises((显然不可能!?assertRaises((中Exception的一般用法是怎么回事?
BTW
isinstance(argparse.ArgumentTypeError, Exception)
返回False?!
参考号:类ArgumentTypeError(异常(:
argparse.ArgumentTypeError
是Exception
的子类,而不是实例,是您应该断言并引发的异常类型。
import argparse
def test_mac_address_false(self):
self.assertRaises(argparse.ArgumentTypeError, mymodule.validate_mac_addr, "n0:ma:ca:dd:re:ss:here")