如何测试需要命令行参数的Python类?
我有一个需要命令行参数的python类:如何测试需要命令行参数的Python类?,python,pytest,Python,Pytest,我有一个需要命令行参数的python类: class SomeClass: request = sys.argv[1] + ".json" def __init__(self_: self.req = request 我会在命令行上运行someClass.py,即python someClass 1234,这会将json设置为1234.json 我想要第二个类testClass.py,能够在主类内部测试方法。但首先,我只想通
class SomeClass:
request = sys.argv[1] + ".json"
def __init__(self_:
self.req = request
我会在命令行上运行someClass.py,即python someClass 1234,这会将json设置为1234.json
我想要第二个类testClass.py,能够在主类内部测试方法。但首先,我只想通过打印变量来确保其连接:
from someClass import SomeClass
i = SomeClass()
print(i.req)
如果我运行python testClass.py(没有任何输入),我会得到一个丢失的输入错误
error: the following arguments are required: input
因此,如果我运行python testClass.py 1234,我会得到
none
我只想知道如何将类拉入,并确保它提供了一个参数,这样我就可以测试其中的各个组件。只需在每个需要它的测试中覆盖
请求
:
导入单元测试
从x导入SomeClass
类TestClass(unittest.TestCase):
def设置(自):
SomeClass.request=''
一般来说,不要让课程自行设置。使类采用非默认的参数
您始终可以生成提供默认值的更高级别代码。首先不要让您的类依赖于
sys.argv
class SomeClass:
def __init__(self, base):
self.req = base + ".json"
然后
你不能构建一个类,这样构造函数就可以得到一个参数,你可以用sys.argv来填充它吗?如果
sys.argv[1]
不存在,在你有机会修补someClass.request
之前,尝试导入x
时,这将立即引发一个索引器,不这样做的另一个原因是,这是对可交付成果的需求,由需求分析师设定。但愿我能改变它!还有其他想法吗?您可以在导入SomeClass
之前检查sys.argv
的值,并在必要时手动分配给它。您的错误消息表明,argparse
之类的东西正在尝试解析参数,但也未能解析参数。
from someClass import SomeClass
i = SomeClass(sys.argv[1]) # or any other value
print(i.req)