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官方文档

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说...
    JokerW阅读 478评论 0 2
  • 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》—...
    梁林張斌阅读 2,303评论 0 4
  • 单元测试 测试可以保证你的代码在一系列给定条件下正常工作 测试允许人们确保对代码的改动不会破坏现有的功能 测试迫使...
    萧十一郎456阅读 1,253评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 功能介绍 好的编码习惯都应该为每一行代码做覆盖测试,但有些时候代码处理的是从网络上获取的内容,或者设备的返回,比如...
    羽风之歌阅读 15,714评论 1 15