如何用Mock让所有argparse选项属性返回False,无需逐一枚举?
优雅创建默认返回False的Mock参数对象
针对你的需求,有两种简洁的实现方式,无需手动枚举所有选项:
方法一:自定义极简Mock类
直接写一个简单的类,重写__getattr__方法,让任意未定义的属性访问都返回False:
class MockArgs: def __getattr__(self, attr): return False def test_something(): a = A(MockArgs()) # 后续测试逻辑
不管你的argparse有多少个store_true选项,这个类都能自动返回False,完全不用关心具体选项名称。
方法二:用argparse生成真实默认参数
如果希望用和生产环境一致的真实args对象,而不是Mock类,可以直接调用argparse解析空参数列表,得到所有选项都为默认值(store_true的默认就是False):
def test_something(): # 复用你的argparse定义,或者直接在这里重新定义 p = argparse.ArgumentParser() p.add_argument("--option1", action="store_true") p.add_argument("--option2", action="store_true") # 解析空列表,得到所有选项都是默认的False args = p.parse_args([]) a = A(args) # 后续测试逻辑
这种方式的优势是完全模拟真实场景,避免Mock对象可能带来的不一致问题,同时自动同步所有argparse选项的默认值。
内容的提问来源于stack exchange,提问作者kosciej16
相关产品推荐
相关产品推荐

