8 python methods unit-testing mocking python-mock
试图为我的基于类的函数编写一个测试用例。这是我班级的骨架
class Library(object):
def get_file(self):
pass
def query_fun(self):
pass
def get_response(self):
self.get_file()
response = self.query_fun()
# some business logic here
return response
Run Code Online (Sandbox Code Playgroud)
我需要创建一个测试用例,它可以只模拟 query_fun并完成其余的工作。在下面尝试过,但似乎不是正确的方向:
from unittest import mock, TestCase
from library.library import Library
class TestLibrary(TestCase):
def setUp(self):
self.library = Library()
@mock.patch('library.library.Library')
def test_get_response(self, MockLibrary):
mock_response = {
'text': 'Hi',
'entities': 'value',
}
MockLibrary.query_fun.return_value = mock_response
response = MockLibrary.get_response()
self.assertEqual(response, mock_response)
Run Code Online (Sandbox Code Playgroud)
我期待的是设置 mock 并且调用get_response实际上不会调用原始query_fun方法,而是调用 mock query_fun。
Mar*_*ers 16
你需要考虑到你嘲笑了整个班级。您也可以模拟单个方法:
@mock.patch('library.library.Library.query_fun')
def test_get_response(self, mock_query_fun):
mock_query_fun.return_value = {
'text': 'Hi',
'entities': 'value'
}
}
response = MockBotter.get_response()
self.assertIsNotNone(response)
Run Code Online (Sandbox Code Playgroud)
仅有的 Library.query_fun被替换了,班级里的其他一切都还在。
简化演示:
>>> from unittest import mock
>>> class Library(object):
... def query_fun(self):
... pass
... def get_response(self):
... return self.query_fun()
...
>>> with mock.patch('__main__.Library.query_fun') as mock_query_fun:
... mock_query_fun.return_value = {'foo': 'bar'}
... print(Library().get_response())
...
{'foo': 'bar'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14204 次 |
| 最近记录: |