【问题标题】:How to unittest validation of arguments in argparse using assertRaises() in Python?如何在 Python 中使用 assertRaises() 对 argparse 中的参数进行单元测试验证?
【发布时间】:2022-01-06 02:24:01
【问题描述】:

当尝试在 argparse 中对参数的验证进行单元测试时,以下工作:

我的模块:

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”,但在这个例子中这显然是不可能的!? assertRaises() 中 Exception 的一般用法是怎么回事?

顺便说一句

isinstance(argparse.ArgumentTypeError, Exception)

返回 False?!

参考:class ArgumentTypeError(Exception):

【问题讨论】:

    标签: python exception argparse python-unittest


    【解决方案1】:

    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") 
    

    【讨论】:

    • 你的回答让我明白了。谢谢你。现在测试也通过了 argparse.ArgumentTypeError。我收到“NameError:名称'argparse'未定义”。我忘记在 unittest 文件中导入 argparse。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2021-04-29
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多