django的单元测试框架unittest
Posted shengulong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django的单元测试框架unittest相关的知识,希望对你有一定的参考价值。
django的单元测试
指定测试范围:
- 指定运行某些测试文件./manage.py test --pattern="tests_*.py" -v 2
- 运行所有测试文件./manage.py test -v 2
-
# Run all the tests in the animals.tests module $ ./manage.py test animals.tests
-
# Run all the tests found within the ‘animals‘ package $ ./manage.py test animals
-
# Run just one test case $ ./manage.py test animals.tests.AnimalTestCase
-
# Run just one test method $ ./manage.py test animals.tests.AnimalTestCase.test_animals_can_speak
临时数据库:
运行时会临时创建数据库,运行结束后删除,数据库名字:test_用到的数据库。猜测是使用migragtion文件创建的
举例:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @Author : @Date : 2019-01-02 22:48 @Description : 本文件的作用描述 @File : test_demo.py """ from unittest.mock import patch from django.test import TestCase import os def multiple(a, b): return a * b class Calculator(object): def add(self, a, b): return a+b def is_error(self): try: os.mkdir("11") return False except Exception as e: return True def multiple(self, a, b): return a * b # Mock一个函数。 class TestOneFunc(TestCase): # 指定函数的写法:要先写当前文件名,即module name @patch(‘test_demo.multiple‘) def test_multiple(self, mock_multiple): mock_multiple.return_value = 3 self.assertEqual(multiple(8, 14), 3) class TestProducer(TestCase): def setUp(self): self.calculator = Calculator() # Mock的函数每次被调用返回不同的值 @patch.object(Calculator, ‘add‘) def test_effect(self, mock_add): # 注意list的顺序要和后面的顺序一一对应 mock_add.side_effect = [1, 2, 3] self.assertEqual(self.calculator.add(8, 14), 1) self.assertEqual(self.calculator.add(8, 14), 2) self.assertEqual(self.calculator.add(8, 14), 3) # Mock一个对象里面的方法 @patch.object(Calculator, ‘add‘) def test_add1(self, mock_add1): # 模拟add函数的返回值为3,所以不管真实结果是否是3,都没有影响 mock_add1.return_value = 3 self.assertEqual(self.calculator.add(8, 14), 3) # 让Mock的函数抛出exception @patch(‘os.mkdir‘) def test_exception(self, mock_mkdir): mock_mkdir.side_effect = Exception self.assertEqual(self.calculator.is_error(), True) # Mock多个函数,主要是注意顺序 @patch.object(Calculator, ‘add‘) @patch.object(Calculator, ‘multiple‘) def test_both(self, mock_multiple, mock_add): mock_add.return_value = 1 mock_multiple.return_value = 2 self.assertEqual(self.calculator.add(8, 14), 1) self.assertEqual(self.calculator.multiple(8, 14), 2) class ClassTemplate(object): def __init__(self, name): # __name c是私有变量,只有类本身可以访问,子类也不可以访问 # _name 是受保护变量,类本身和子类可以访问,from module import *无法导入 # decorator/迭代器/yield/ self.__name = name def run(self): print("my name is %s" % self.__name) @staticmethod def staticmethod(value): print("my value is {}".format(value)) if __name__ == ‘__main__‘: ClassTemplate(‘a_name‘).run() ClassTemplate.staticmethod(‘a_value‘)
参考:
1、https://www.jianshu.com/p/b87d7b4a222a
2、https://segmentfault.com/a/1190000002965620
3、https://docs.python.org/3.7/library/unittest.mock.html
4、https://docs.djangoproject.com/zh-hans/2.1/topics/testing/overview/
以上是关于django的单元测试框架unittest的主要内容,如果未能解决你的问题,请参考以下文章