Skip to main content
 首页 » 编程设计

python之如何测试在对象构造期间调用导入模块上的方法

2025年05月04日15lori

我正在开发一个 Reddit 机器人来学习 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 类,并断言稍后使用预期参数调用这些方法。我怎样才能做到这一点?

请您参考如下方法:

assert_called_with 是断言。只要它没有触发,即引发 AssertionError 异常,就可以了。您无需检查其返回值,它始终为 None。