如何从与正在测试的类的同一模块中修补一个类



我在同一模块中定义了两个类。第二类中的一种方法是调用第一类方法。我想在第二个方法中构造该方法的测试,以确认它正确调用了第一类,但是我有一些问题使语法正确以修补课程。

这是我拥有的代码的示例:

content_provider.py:

class ContentUser():
    def getUserRef(self, username):
        ...
        return userRef
class ContentReportGeneralSearch():
    def getReport(self,username,search_text,search_type='0'):
        user = ContentUser()
        user.getUserRef(username=username)
        ....

test_content_provider.py:

@mock.patch('content_provider.ContentUser')
def test_getReport(self):
    provider = ContentReportGeneralSearch()
    provider.getReport(username='test',search_text='')
    mock_user.getUserRef.assert_called_once_with(username='test')

当我运行此测试时,我会得到结果:

essertionError:期望一次称为" getuserref"。称为0次。

我怀疑问题是我指定了补丁的方式,但是我尝试了多种方法而没有任何成功。

任何帮助将不胜感激!

您几乎在那里,这是单元测试解决方案:

content_provider.py

class ContentUser():
    def getUserRef(self, username):
        userRef = ''
        return userRef

class ContentReportGeneralSearch():
    def getReport(self, username, search_text, search_type='0'):
        user = ContentUser()
        user.getUserRef(username=username)

test_content_provider.py

import unittest
from unittest import mock
from content_provider import ContentReportGeneralSearch

class TestContentProvider(unittest.TestCase):
    @mock.patch('content_provider.ContentUser')
    def test_getReport(self, mock_ContentUser):
        content_user_instance = mock_ContentUser.return_value
        provider = ContentReportGeneralSearch()
        provider.getReport(username='test', search_text='')
        content_user_instance.getUserRef.assert_called_once_with(username='test')

if __name__ == '__main__':
    unittest.main()

带有覆盖范围报告的单位测试结果:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name                                                  Stmts   Miss  Cover   Missing
-----------------------------------------------------------------------------------
src/stackoverflow/54841363/content_provider.py            8      2    75%   3-4
src/stackoverflow/54841363/test_content_provider.py      11      0   100%
-----------------------------------------------------------------------------------
TOTAL                                                    19      2    89%

源代码:https://github.com/mrdulin/python-codelab/tree/master/src/src/stackoverflow/54841363

最新更新