如何在Python中使用assertRaises()对argparse中的参数进行单元测试验证



当尝试对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.ArgumentTypeErrorException子类,而不是实例,是您应该断言并引发的异常类型。

import argparse

def test_mac_address_false(self):
self.assertRaises(argparse.ArgumentTypeError, mymodule.validate_mac_addr, "n0:ma:ca:dd:re:ss:here") 

最新更新