Python单元测试:如何为方法传递所有参数值?
嘿,这个问题其实很好解决!因为initial_foo只关心传入的对象有没有a、b(以及你想传递的c)属性,而不是这个对象是不是真的由argparse解析出来的。给你几种实用的测试方法:
方法1:手动创建
argparse.Namespace实例(最直接) 这是测试这类方法最简单的方式,你完全不需要调用argparse的解析逻辑,直接构造符合要求的实例就行:
import argparse from your_script import initial_foo # 替换成你的脚本/模块名 # 直接构造包含所有参数的Namespace对象 test_args = argparse.Namespace(a='hii', b='bye', c='yolo') # 传入方法测试 initial_foo(test_args)
方法2:模拟命令行参数解析(更贴近真实场景)
如果你想模拟真实的命令行调用流程,可以手动构造参数列表,用argparse解析后再传入:
import argparse from your_script import initial_foo # 先定义和你原代码一致的解析器 parser = argparse.ArgumentParser() parser.add_argument('--a') parser.add_argument('--b') parser.add_argument('--c') # 模拟命令行传入的参数列表 test_cli_args = ['--a', 'hii', '--b', 'bye', '--c', 'yolo'] # 解析得到Namespace实例 args = parser.parse_args(test_cli_args) # 调用方法测试 initial_foo(args)
方法3:在测试框架中使用(比如pytest/unittest)
如果是用测试框架写自动化测试,同样可以用上面的思路,比如pytest的例子:
import argparse import pytest from your_script import initial_foo def test_initial_foo_function(): # 创建测试用的参数对象 test_args = argparse.Namespace(a='test_val_a', b='test_val_b', c='test_val_c') # 执行方法 output = initial_foo(test_args) # 根据你的方法逻辑添加断言,比如检查返回值或内部状态 assert output == expected_result # 替换成你的实际断言逻辑
本质上,argparse.Namespace就是一个简单的属性容器,只要传入的对象有a、b、c这三个属性,initial_foo就能正常工作,所以手动构造实例是最高效的测试方式。
内容的提问来源于stack exchange,提问作者PySaad
相关产品推荐
相关产品推荐

