Python 如何存根对象';调用方法?

Python 如何存根对象';调用方法?,python,unit-testing,nose,fudge,Python,Unit Testing,Nose,Fudge,我正在使用Nose和Fudge进行单元测试。考虑下面的类: class Foo(): def __init__(self, some_commandline): self._some_commandline = commandline def process(self): stdout, stderr = self._commandline() ... 还有一个测试: def test_process_commandli

我正在使用
Nose
Fudge
进行单元测试。考虑下面的类:

class Foo():    
    def __init__(self, some_commandline):
        self._some_commandline = commandline

    def process(self):
        stdout, stderr = self._commandline()
        ...
还有一个测试:

def test_process_commandline(self):
        import StringIO

        # Setup
        fake_stdout = StringIO.StringIO()
        fake_stderr = StringIO.StringIO()
        fake_stdio = fake_stdout, fake_stderr
        fake_cline = (fudge
            .Fake('SomeCommandline')
            .is_a_stub()
            .provides('__call__')
            .returns(fake_stdio))

        sut = Foo(fake_cline)

        # Exercise
        sut.process()

        # Verify
        ...
我得到的错误是:

...
    stdout, stderr = self._commandline()
TypeError: 'Fake' object is not iterable
我正在存根的代码有一个返回行,看起来像这样(真正版本的“
SomeCommandline
”)


为什么我会得到类型错误,说Fake是不可编辑的,我如何用
fudge
存根这个方法?

存根应该使用
.is\u callable()
而不是
。提供(“调用”)

另外,
.is\u a\u stub()
在这里是不需要的,因为我们要直接删除方法,
\u调用
,它可以通过类名
SomeCommandLine
访问

return stdout_str, stderr_str
    fake_cline = (fudge
        .Fake('SomeCommandline')
        .is_callable()
        .returns(fake_stdio))