我正在尝试使用魔术模拟来模拟对弹性搜索的调用。如果我使用import elasticsearch
可以正常工作,但是如果我使用from elasticsearch import Elasticsearch
下面的测试将向我打印问候字符串。
import unittest
from unittest import mock, TestCase
from unittest.mock import MagicMock
import elasticsearch
class TestJobApis(TestCase):
@mock.patch("elasticsearch.Elasticsearch",MagicMock(return_value="heellloo"))
def test_get_all_jobs(self):
print(elasticsearch.Elasticsearch())
if __name__ == '__main__':
unittest.main()
但是这个不起作用。转到实际的弹性搜索调用。
import unittest
from unittest import mock, TestCase
from unittest.mock import MagicMock
from elasticsearch import Elasticsearch
class TestJobApis(TestCase):
@mock.patch("elasticsearch.Elasticsearch",MagicMock(return_value="heellloo"))
def test_get_all_jobs(self):
print(Elasticsearch())
if __name__ == '__main__':
unittest.main()
在从import导入的情况下,如何获得相同的结果。因为我在代码中使用了这种方法进行测试。我可以通过更改补丁参数来实现吗?
答案 0 :(得分:0)
import unittest
from unittest import mock, TestCase
from unittest.mock import MagicMock
from elasticsearch import Elasticsearch
class TestJobApis(TestCase):
@mock.patch("test.test_job_api.Elasticsearch",MagicMock(return_value="heellloo"))
def test_get_all_jobs(self):
print(Elasticsearch())
if __name__ == '__main__':
unittest.main()
以上内容解决了该问题。
答案 1 :(得分:0)
由于我不太了解上述解决方案,因此我将添加一些细节以使其更加清晰。
说您的目录如下。
project/
source_python.py
test_source.py
在test_source.py中:
class YourTestClass(TestCase):
@mock.patch("project.test_source.Elasticsearch", MagicMock(return_value="heellloo"))
def test_get_all_jobs(self):
assert Elasticsearch() == "heellloo"