我正在使用Reddit bot來學習python中的TDD。如何在對象構建過程中調用導入模塊上的方法
我有一個類模塊,是這樣的:
from praw import Reddit
class Bot():
def __init__(self):
self.reddit = Reddit(user_agent='myBot')
self.reddit.login('fake', 'fakePassword')
在我的測試套件我有一個設置方法是這樣的:
@patch('bot.bot.Reddit.login')
def setUp(self, mocked_reddit):
self.mocked_reddit = mocked_reddit
self.subject = Bot()
..和這樣的測試:
def should_call_reddit_login_when_initialized_test(self):
self.assertTrue(self.mocked_reddit.assert_called_with('fake', 'fakePassword'))
這看起來像我的補丁只是部分工作。它實際上並沒有調用Reddit API,這很好。然而,斷言總是錯誤的。
line 22 in should_call_reddit_login_when_initialized_test
self.assertTrue(self.mocked_reddit.assert_called_with('fake', 'fakePassword'))
AssertionError: None is not true
理想情況下,我可以嘲笑整個Reddit類,並斷言稍後使用期望的參數調用方法。我怎樣才能做到這一點?
你*需要*引用外部庫,當執行* unit *測試的事實表明設計缺陷。你應該真的考慮改變你的代碼,以便單元測試真的可以是沒有副作用的單元測試。 – 2015-03-19 04:35:39
我試圖嘲笑它,所以它實際上並沒有被調用。我需要驗證它是否在某個時刻被調用,但我不需要測試調用實際的Reddit api。 – ZeroDivide 2015-03-19 11:44:45