从导入使用Python魔术模拟弹性搜索客户端调用不起作用

时间:2019-02-26 13:29:46

标签: python-3.x python-unittest

我正在尝试使用魔术模拟来模拟对弹性搜索的调用。如果我使用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导入的情况下,如何获得相同的结果。因为我在代码中使用了这种方法进行测试。我可以通过更改补丁参数来实现吗?

2 个答案:

答案 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"