【发布时间】:2014-02-15 10:57:06
【问题描述】:
这是我尝试使用 mock 测试的代码的通用示例。我得到一个 AttributeError。
这里是 __init__.py:
import logging
log = logging.getLogger(__name__)
class SomeError(Exception):
pass
class Stuff(object):
# stub
def method_a(self):
try:
stuff = self.method_b()
except SomeError, e:
log.error(e)
# show a user friendly error message
return 'no ponies'
return 'omg ponies'
def method_b(self):
# can raise SomeError
return ''
在 tests.py 我有这样的东西:
import mock
import unittest
from package.errors import SomeError
from mypackage import Stuff
some_error_mock = mock.Mock()
some_error_mock.side_effect = SomeError
class MyTest(unittest.TestCase):
@mock.patch.object('Stuff', 'method_b', some_error_mock)
def test_some_error(self):
# assert that method_a handles SomeError correctly
mystuff = Stuff()
a = mystuff.method_a()
self.assertTrue(a == 'no ponies')
运行测试时,mock 会引发 AttributeError 说:“Stuff does not have the attribute 'method_b'”
我在这里做错了什么?
【问题讨论】:
-
为什么叫它类方法呢?这不是实例方法吗?
-
已经快三年了。我什至不记得这个问题与哪个项目相关,因为我用 Stuff 等替换了名称。
标签: python django unit-testing testing mocking