我正在使用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
”的真实版本)
return stdout_str, stderr_str
为什么我收到TypeError,说Fake不可迭代,如何使用fudge
存储此方法?
答案 0 :(得分:0)
应使用.is_callable()
代替.provides('__call__')
设置存根:
fake_cline = (fudge
.Fake('SomeCommandline')
.is_callable()
.returns(fake_stdio))
此外,此处不需要.is_a_stub()
,因为我们直接删除了__call__
方法,可以通过类名SomeCommandLine
访问该方法。