import os import unittest import common_util from unittest import mock from petrel_client.client import Client test_dir = os.path.dirname(os.path.realpath(__file__)) class TestRead(unittest.TestCase): def setUp(self): # 实例化一个 Mock 对象,用于替换 petrel_client.ceph.s3.s3_client.S3Client.get_with_info 函数 self._mock_get_with_info = mock.Mock() # self._mock_get_with_info.return_value = "23", {} self._mock_get_with_info.return_value = None, {} # 替换 petrel_client.ceph.s3.s3_client.S3Client.get_with_info 函数 self._patcher = mock.patch( '', self._mock_get_with_info) self._patcher.start() pass def tearDown(self): self._patcher.stop() pass # 1. 在setUp注入Mock方法,替换petrel_client.ceph.s3.s3_client.S3Client.get_with_info函数,并在tearDown停止Mock def test_read1(self): _conf_path = '/home/PJLAB/huipeng/petreloss.conf' c = Client(conf_path=_conf_path) # self._mock_get_with_info.return_value = "23", {} # data = c.get('cluster1:s3://lili1.test2/sometest') data = c.get("s3://hptestbucket/a/b/c.go") print("data is ", data) self.assertEqual("23", data) # 2.使用@mock.patch指定被替换的方法,并默认按参数列表的顺序替换该方法 # @mock.patch("petrel_client.ceph.s3.s3_client.S3Client.get_with_info") # #@mock.patch("...") # def test_read2(self, mock_get_with_info): # mock_get_with_info.return_value = "15", {} # _conf_path = test_dir + '/conf/petreloss.conf' # c = Client(conf_path=_conf_path) # data = c.get('cluster1:s3://lili1.test2/sometest') # self.assertEqual("15", data) # # 3.使用with mock.patch 替换掉指定模块 # def test_read3(self): # mock_get_with_info = mock.Mock() # mock_get_with_info.return_value = "15", {} # _conf_path = test_dir + '/conf/petreloss.conf' # c = Client(conf_path=_conf_path) # with mock.patch( # 'petrel_client.ceph.s3.s3_client.S3Client.get_with_info', # mock_get_with_info): # data = c.get('cluster1:s3://lili1.test2/sometest') # self.assertEqual("15", data) if __name__ == '__main__': common_util.run_test()