美文网首页
使用unittest进行单元测试

使用unittest进行单元测试

作者: Ellis | 来源:发表于2018-01-17 19:38 被阅读0次

    单元测试就是要模仿程序的执行过程,然后捕捉运行结果,判断是否和预想的一样,总之目的就是要使单元测试通过
    python自带的unittest就可以帮我们完成这个

    unittest中的 方法:

    先看一个简单的示例:

    import mock
    import unittest
    from dock_slots.lib.push import Push
    
    class TestPush(unittest.TestCase):
    
        def setUp(self):
            self.user_id_list = [[1, 702], [2, 702], [2, 703], ]
            self.msg = {"aps":
                            {"alert": "some messages",
                             "sound": "default",
                             "badge": 1},
                        "extra": {}
                        }
            self.patcher_account = mock.patch(
                "dock_slots.lib.user.Account")
            self.account = self.patcher_account.start()
            account_instance = mock.Mock()
            self.account.return_value = account_instance
            account_instance.device_manager.device.to_dict.return_value = {
                # "dvc_typ": "ios",
                "dvc_tkn": "a4e9acd861ea1d1c6*********"
            }
    
        def tearDown(self):
            pass
    
        def test_send(self):
            p = Push(self.user_id_list, self.msg)
            status = p.send()
            self.assertEqual(status, True)
    
        def test_ParameterException(self):
            pass
    
    
    if __name__ == '__main__':
        unittest.main()
    
    1. 编写单元测试时,需要继承一个unittest.TestCase
    2. setup 方法和 teardown 方法,是特殊方法,表示每个测试方法开始执行和测试结束时执行的函数,如果有要导入的配置,全局变量,或者打开什么文件,就可以在setup中写,如果要最终要关闭文件,就可以在teardown中写。
    3. 如果是测试方法,就要以test_开头,否则不会执行
      每一个测试,都应该写一个测试方法
    4. unittest.TestCase为我们提供了很多内置的条件判断,最常用的是, assertEquarls()就是判断是否相等,比如
    self.assertEquals(abs(-1), 1) # 断言函数返回的结果与1相等
    

    此外还有 ,assertRaises,用来判断是否使我们期望的异常

    1. 说一下这个mock,mock是一个支持单元测试的库,可以用来模拟对象,用一个mock对象来模拟真实的python对象。
      假如我们的测试中需要从真实的服务器上拿数据,不能真的去连接服务器,此时就可以实例化一个mock对象来模拟这个连接服务器的过程,只需要返回我们想要的数据就行了
      在上面这个例子中,我们需要从数据库中拿dvc_typ 和 dvc_tkn ,但是没办法连线上的数据库,所以用一个mock来替换这个对象,直接返回需要的数据就行了

    这个mock.patch, 还有一种用法,就是mock.patch.object(类,要替换的类里的方法)

    1. 执行单元测试的时候,比如测试文件是test_pu.py ,测试的时候在终端里输入命令,先进入文件目录,然后:
    python -m unnittest test_pu
    

    相关文章

      网友评论

          本文标题:使用unittest进行单元测试

          本文链接:https://www.haomeiwen.com/subject/dupuoxtx.html