如何将函数的每个输入参数设置为“无”并验证是否返回错误?

2024-09-29 23:23:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些功能要测试。实际上,我有9个输入参数,但我把它设为3是为了简化我的问题

def submit(var1, var2, var3)

我的测试用例如下所示:

def test_submit_missing(

     var1=default_value1
     var2=default_value2
     var3=default_value3

     print ('\nAssert missing var1 returns error:\n')
     with self.assertRaises(SomeException) as err: 
          self.submit(None, var2, var3)

     print ('\nAssert missing var2 returns error:\n')
     with self.assertRaises(SomeException) as err: 
          self.submit(var1, None, var3)

     print ('\nAssert missing var3 returns error:\n')
     with self.assertRaises(SomeException) as err: 
          self.submit(var1, var2, None)

     #In reality, I have 9 input vars to test 

Tags: selfdefaultaswitherrorreturnssubmitprint
2条回答

像这样的事情怎么样:

class SomeException(Exception):

    def __init__(self, key):
        self.key = key
        super(SomeException, self).__init__(key)


def submit(**kargs):
    for key, val in kargs.items():
        if not val:
            raise SomeException(key)


try:
    submit(var1=1, var2=None)
except SomeException as err:
    print 'No value for %s' % err.key

try:
    submit(**{'var1': 1, 'var2': 2, 'var3': None})
except SomeException as err:
    print 'No value for %s' % err.key

结果将是:

No value for var2
No value for var3

这是什么伟大的是,即使你的输入改变了功能的数量仍然会工作。你知道吗

刚发完帖子,我就意识到我不理解这个问题,所以下面是我的答案:

 name = ['var1', 'var2', 'var3', 'var4']
 val = ['val1', 'val2', 'va3l', 'val4']

 for i in range(len(name)):
     tmp = list(val)
     tmp[i] = None
     with self.assertRaises(SomeException) as err:
         self.submit(**zip(name, tmp))

所以我有两个清单:

  • 一个输入参数的名称
  • 默认值为1

在for循环中,我复制默认值的列表(我们需要为其他迭代保留它)
然后我更新这个列表的一个元素并将其设置为无
然后我使用zip创建一个dict,并使用关键字参数unpacking将参数传递给函数

可以创建默认值列表,在循环中将第n个元素设置为None,并使用参数解包将参数传递给测试下的函数,例如:

values = [default_value1, default_value2, default_value3]
for i in xrange(len(values)):
    print ('\nAssert missing var%s returns error:\n' % i)
    params = values[:]
    params[i] = None
    with self.assertRaises(SomeException) as err:
        self.submit(*params)

希望有帮助。你知道吗

相关问题 更多 >

    热门问题