zoukankan      html  css  js  c++  java
  • python Mock 示例

    Python3.x中,mock已经被集成到了unittest单元测试框架中,所以,可以直接使用。

      可能你和我初次接触这个概念的时候会有这样的疑问:把要测的东西都模拟掉了还测试什么呢?

      但在,实际生产中的项目是非常复杂的,对其进行单元测试的时候,会遇到以下问题:

    • 接口的依赖
    • 外部接口调用
    • 测试环境非常复杂

      单元测试应该只针对当前单元进行测试, 所有的内部或外部的依赖应该是稳定的, 已经在别处进行测试过的.使用mock 就可以对外部依赖组件实现进行模拟并且替换掉, 从而使得单元测试将焦点只放在当前的单元功能。

    简单示例一:

    from unittest.mock import Mock
    
    import unittest
    
    class Count():
        def add(self,a,b):
            return a+b
    
    class test_add(unittest.TestCase):
    
        def setUp(self):
            pass
    
        def tearDown(self):
            pass 
    
        
        def test_add(self):
    
            count=Count()
            
            count.add=Mock(return_value=13)
    
            result=count.add(4,4)
            
            self.assertEqual(result,13)
    
    if __name__=='__main__':
    
        unittest.main()

      count = Count()

      首先,调用被测试类Count()

       count.add = mock.Mock(return_value=13)

      通过Mock类模拟被调用的方法add()方法,return_value 定义add()方法的返回值。

       result = count.add(4,4)

      接下来,相当于在正常的调用add()方法,传两个参数44,然后会得到相加的结果8

      然后,13的结果是我们在上一步就预先设定好的。

      self.assertEqual(result,13)

      最后,通过assertEqual()方法断言,返回的结果是否是预期的结果13

    简单示例二:

    from unittest.mock import Mock
    from unittest.mock import patch
    import unittest
    
    class Count():
        def add(self,a,b):
            return a+b
    
    class test_add(unittest.TestCase):
    
        def setUp(self):
            pass
    
        def tearDown(self):
            pass 
    
        @patch.object(Count,'add')
        def test_add(self,mock_add):
    
            count=Count()
            
            mock_add.return_value=13
    
            result=count.add(4,4)
            
            self.assertEqual(result,13)
    
    if __name__=='__main__':
    
        unittest.main()

    参考:https://www.cnblogs.com/ajianbeyourself/p/8795441.html

  • 相关阅读:
    Git`s Operation
    从volatile说到,i++原子操作,线程安全问题
    sql中的几种删除方式
    Hibernate&MyBatis different
    集合问答
    Data Struct and Data Type
    Hash table and application in java
    idea`s shortcut key
    001--idea第一个报错JNI报错
    recyclebin
  • 原文地址:https://www.cnblogs.com/tangqiu/p/9493010.html
Copyright © 2011-2022 走看看