我在同一模块中定义了两个类。第二类中的一种方法是调用第一类方法。我想在第二个方法中构造该方法的测试,以确认它正确调用了第一类,但是我有一些问题使语法正确以修补课程。
这是我拥有的代码的示例:
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