Python - 如何在方法中传递所有args值进行单元测试?

时间:2018-02-06 17:46:28

标签: python python-3.x unit-testing

我陷入了困境。

下面是相同的插图。

我通过参数解析传递值。 a,b,c的值。

代码是 -

initial_foo(args): **codes** args.a, args.b are used here.

如果我打印args,则返回self.args = argsparse.Namespace(a='hii',b='bye',c='yolo')。现在,如果我在args中传递initial_foo(self.args),它会自动获取通过args提供的值。

现在,我想测试这个initial_foo(args)方法。所以,我可能做的就是设置相同的self.args = argsparse.Namespace(a='hii',b='bye',c='yolo')并传入initial_foo方法。如果我不想使用它,该怎么办?

还有其他相同的解决方案吗?

我们可以通过``** locals()做什么?

如果您有任何疑问,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果您正在考虑如何在不创建argparse.Namespace对象的情况下对initial_foo进行单元测试,那么您可以传递initial_foo任何具有属性'a', 'b', 'c'并允许dot的对象记谱法。

locals()不起作用,因为它会为您提供dict。字典元素通过索引(__getitem__)访问,而不是点运算符(__getattr__

您可以使用这些道具创建一个类,并传入该类的对象。

class Data(object):
    def __init__(self, a, b, c):
         self.a = a
         self.b = b
         self.c = c

initial_foo(Data(1,2,3))

或者传入一个命名元组

from collections import namedtuple
data = namedtuple('data', ['a', 'b', 'c'])
initial_foo(data(1,2,3))

任何类似的东西也应该起作用。