我有一个文件say twitter.py我有两个全局对象:用户和推文。我有另一个文件说twitter_utils.py,其中我导入了Twitter,并使用全局对象编写了几种方法,如以下内容:
twitter_utils.py:
import twitter
def __get_user_date_of_birth(user_id):
return twitter.user.get_date_of_birth(userId=user_id)
def __get_tweet_likes_count(user_id, tweet_id):
return twitter.tweet.getLikesCount(user_id, tweet_id)
我创建了一个文件test_twitter_utils.py,并尝试为上述方法编写测试。以下是一个尝试:
import twitter
import twitter_utils
@patch('twitter_utils.twitter.user')
def test_get_user_date_of_birth(mock_user):
mock_get_date_of_birth = Mock(
return_value='18 Aug 1989')
mock_user.attach_mock(mock_get_date_of_birth,
'get_date_of_birth')
twitter_utils.__get_user_date_of_birth('test')
assert mock_user.mock_get_date_of_birth.call_count == 1
上面的测试失败的断言错误说,断言0 == 1。本质上说mock_user.mock_get_date_of_birth.call_count = 0。我在做什么错?我在以错误的方式导入事情吗?
我相信您需要使用模块导入的路径进行模拟。 twitter_utils.py
导入twitter
,因此您的patch
应该修补twitter
。
@patch('twitter_utils.twitter')
。
然后您可以从那里模拟功能。
您是否一直在进行类似的导入:
from twitter import user as twitter_user
然后您的补丁是@patch("twitter_utils.twitter_user")
另外,不确定您是否知道,但是在编写测试时,最好使用unittest
框架。https://docs.python.org/2/library/unittest.html