如何测试需要命令行参数的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,能够在主类内部测试方法。但首先,我只想通

我有一个需要命令行参数的python类:

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)