Uri*_*lit 9 python unit-testing mocking
我试图测试一个方法,在其中创建另一个类的实例,我试图模拟内部类的创建......这对我不起作用.我尝试将问题复制到一个简化的案例 - 但仍然没有去.这是简化的案例:
我有一个新的目录pymock与__init__.py它.除此之外,还有以下3个文件:
foo.py
#!/usr/bin/python
class Foo(object):
def foo1(self):
return 1
Run Code Online (Sandbox Code Playgroud)
goo.py
#!/usr/bin/python
from foo import Foo
class Goo(object):
def goo1(self):
f = Foo()
return f.foo1()
Run Code Online (Sandbox Code Playgroud)
goo_test.py
#!/usr/bin/python
from mock import patch, Mock
from nose.tools import assert_equal
from goo import Goo
class TestGoo(object):
def setup(self):
self.goo = Goo()
@patch('pymock.foo.Foo', autospec=True)
def test_goo1(self, foo1_mock):
foo_instance = Mock()
foo1_mock.return_value = foo_instance
foo_instance.foo1.return_value = 11
assert_equal(11, self.goo.goo1())
Run Code Online (Sandbox Code Playgroud)
提前致谢!
你需要修补的名字是goo正在使用.
@patch('pymock.goo.Foo', autospec=True)
Run Code Online (Sandbox Code Playgroud)
小智 5
基本上这就是您导入函数/类的方式。在goo.py你Foo直接导入。所以goo.py它有自己的参考Foo,所以你的补丁必须是:
@patch('pymock.goo.Foo', autospec=True)
但如果goo.py看起来像这样:
#!/usr/bin/python
import foo
class Goo(object):
def goo1(self):
f = foo.Foo()
return f.foo1()
Run Code Online (Sandbox Code Playgroud)
您问题中的补丁可以使用,因为goo.py没有直接引用Foo