openstack测试之mock学习

mock 模块学习

mock是什么

mock英文意思是模拟,主要是功能是使用mock对象来指定python对象,以达到模拟对象的作用

假设你测试的对象是一个函数,但是其中函数中使用了其他对象的函数和功能,但是这个时候要进行函数的单元测试。可能其他对象在当前环境下无法使用,所以就要采用mock来模拟对象

常见用法

mock 官方文档

  • mock.MagicMock

    顾名思义这是一个魔法模拟,可以像魔术一样变成任何的对象或者函数,你可以指定它里面的一些方法,在达到对对象构造的目的

    1. return_value: 此参数的作用是构造函数的返回值,一般是为函数设置返回值

    2. 可以对对象的函数例如

      obj.func() = MagicMock(return_value=3)

      表示obj对象的func函数 模拟的返回值是3

    3. patch() 和patch.object()

      这两个通作为装饰器来使用。因为有时候对于对象的模拟不需要全局变量,只需要一定的作用域即可。

      # demo1
      @mock.patch.object(driver_client, 'create_client')
      @mock.patch.object(SpaceType, 'get_by_uuid')
      @mock.patch.object(requests, 'get')
      def test_process_test(self,
                           mock_requests_get,
                           mock_get_by_uuid,
                           mock_create_client):
          mock_create_client.return_value = self.client
          mock_get_by_uuid.return_value = self.space_type
          mock_requests_get.return_value = {'code': 200}
          self.space_engine.process_test(self.space)
          self.assertEqual (self.client.list_buckets.call_count, 1)
          mock_requests_get.assert_called()
      # demo2
      with mock.patch.object(Ojbect, 'method', return_value=None) as mock_method:
       thing = Object()
       thing.method(1, 2, 3)
      # 对结果进行验证
      mock_method.assert_called_once_with(1, 2, 3)
      
         Note: 装饰顺序 从里到外进行装饰,就是从下往上装饰
               执行顺序 装饰器的调用则是从上往下执行
      
    4. 同时其他的验证方法可以查看官方文档来进行学习操作
      mock官方文档

你可能感兴趣的:(openstack测试之mock学习)