引入

单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架。 单元测试与功能测试都是日常开发中必不可少的部分,本文演示了Python中unittest单元测试框架的基本使用。

一个简单的测试例子

定义一个类,简单的实现addsub两个方法,并对其进行单元测试。

待测试的m1.py文件内容如下:

  1. class MyClass(object):
  2. """just a test case"""
  3. def __init__(self, x, y):
  4. self.x = int(x)
  5. self.y = int(y)
  6.  
  7. def add(self):
  8. return self.x + self.y
  9.  
  10. def sub(self):
  11. return self.x - self.y

在与m1.py同级的目录下创建test.py测试文件,使用unittest单元测试框架对A类的方法进行测试。代码内容如下:

  1. import unittest
  2. from m1 import MyClass
  3.  
  4. class MyClassTest(unittest.TestCase):
  5. def setUp(self):
  6. self.calc = MyClass(7, 5)
  7.  
  8. def tearDown(self):
  9. pass
  10.  
  11. def test_add(self):
  12. ret = self.calc.add()
  13. self.assertEqual(ret, 12)
  14.  
  15. def test_sub(self):
  16. ret = self.calc.sub()
  17. self.assertEqual(ret, 2)
  18.  
  19. if __name__ == '__main__':
  20. # 构造测试集
  21. suite = unittest.TestSuite()
  22. suite.addTest(MyClassTest('test_add'))
  23. suite.addTest(MyClassTest('test_sub'))
  24. # 执行测试
  25. runner = unittest.TextTestRunner()
  26. runner.run(suite)

运行测试:

  1. demo1 $ python3 test.py
  2. ..
  3. ----------------------------------------------------------------------
  4. Ran 2 tests in 0.000s
  5.  
  6. OK

到此一个简单的单元测试就完成了。

unittest框架知识点

unittest框架中4个重要的概念:

  1. test fixture:是初始化和清理测试数据及环境,通过重写TestCase的setUp()tearDown()方法来实现
  2. test case:是测试用例
  3. test suite:是测试用例的集合(俗称测试套件),通过addTest加载TestCase到TestSuite中,返回一个TestSuite实例。
  4. test runner:的作用是运行测试用例并返回结果,通过TextTestRunner类提供的run()方法来执行test suitetest case

Django中的单元测试

Django项目的app目录下都默认生成了一个

Model部分单元测试用例

假设项目中有一个Book的model:

  1. class Book(models.Model):
  2. title = models.CharField(max_length=32)
  3. price = models.DecimalField(max_digits=10, decimal_places=2)

测试用例代码:

  1. # app01/tests.py
  2. from django.test import TestCase
  3. from app01.models import Book
  4. # Create your tests here.
  5.  
  6. class BookModelTest(TestCase):
  7. def setUp(self):
  8. Book.objects.create(title='书名', price=11.11)
  9.  
  10. def test_book_model(self):
  11. from decimal import Decimal
  12. result = Book.objects.get(title='书名')
  13. self.assertEqual(result.price, Decimal('11.11'))

运行测试,在项目目录下运行:

  1. $ python3 manage.py test
  2. Creating test database for alias 'default'...
  3. System check identified no issues (0 silenced).
  4. .
  5. ----------------------------------------------------------------------
  6. Ran 1 test in 0.003s
  7.  
  8. OK
  9. Destroying test database for alias 'default'...

测试用例OK…

视图部分单元测试用例

假设我们有个index视图,代码如下:

  1. def index(request):
  2. return render(request, 'index.html')

app01/tests.py文件中添加测试用例代码:

  1. # app01/tests.py
  2. class IndexPageTest(TestCase):
  3. """测试index页面"""
  4. def test_index_page_renders_index_template(self):
  5. """测试index视图"""
  6. response = self.client.get('/index/')
  7. self.assertEqual(response.status_code, 200) # 判断状态码
  8. self.assertTemplateUsed(response, 'index.html') # 判断渲染的模板是否正确

在项目根目录运行python manage.py test命令:

  1. $ python3 manage.py test
  2. Creating test database for alias 'default'...
  3. System check identified no issues (0 silenced).
  4. ..
  5. ----------------------------------------------------------------------
  6. Ran 2 tests in 0.027s
  7.  
  8. OK
  9. Destroying test database for alias 'default'...

python manage.py test命令会查找当前项目中的tests.py文件,并运行测试用例。

Python项目中的单元测试的更多相关文章

  1. python项目中requirements的巧用(一键导入所有安装包)

    一个Python 项目中可能安装很多安装包, 再次创建虚拟环境是需要重新安装的话很麻烦也费时间, 或者项目部署的时候避免重装, 可以将现有项目的所有安装包记录在requirements.txt 文件, ...

  2. Python项目中如何优雅的import

    Python项目中如何优雅的import 前言 之前有一篇关于Python编码规范的随笔, 但是写的比较杂乱, 因为提到了import语句, 在篇文章中, 我专门来讲Python项目中如何更好的imp ...

  3. .NET 项目中的单元测试

    .NET 项目中的单元测试 Intro "不会写单元测试的程序员不是合格的程序员,不写单元测试的程序员不是优秀的工程师." -- 一只想要成为一个优秀程序员的渣逼程序猿. 那么问题 ...

  4. 在 python 项目中如何记录日志

    一. 概述 写本文的目的是我在写 python 项目的时候需要记录日志,我忘记怎么处理了,每次都需要去网上查一遍,好记性不如烂笔头, 这里把查阅的内容记录下来,方便以后查找. python 项目中记录 ...

  5. 项目中创建单元测试—VS2012

    我们在每个项目的开发过程中,开发完一个功能,自己首先需要测试一下,VS提供了很方便的测试功能,可以很容易的创建单元测试,但是在VS2012中类名上点击右键没有『创建单元测试』这个菜单,需要先进行设置一 ...

  6. SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例

     要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中 ...

  7. python 项目中包中__init__.py文件的作用

    开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...

  8. vue项目中添加单元测试

    从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...

  9. [git]安装git-pylint-commit-hook提高python项目中的代码质量

    什么是'git-pylint-commit-hook' 我在工作中,团队为了保证代码和提高代码的质量,要求每个项目都要求安装git-pylint-commit-hook,它是个钩子,会在你提交代码到本 ...

随机推荐

  1. 18.linux基础优化

    1.linux系统的基础优化 (1)关闭selinux sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 临时关闭 ...

  2. pdfminer获取每页的layout

    #! python2 # coding: utf-8 import sys from pdfminer import pdfparser from pdfminer import pdfdocumen ...

  3. WinForm控件之【CheckBox】

    基本介绍 复选框顾名思义常用作选择用途,常见的便是多选项的使用: 常设置属性.事件 Checked:指示组件是否处于选中状态,true为选中处于勾选状态,false为未选中空白显示: Enabled: ...

  4. Junit初级应用实例

    Request: public interface Request { String getName(); } Response: public interface Response { String ...

  5. Neo4j电影关系图

    “电影关系图”实例将电影.电影导演.演员之间的复杂网状关系作为蓝本,使用Neo4j创建三者关系的图结构,虽然实例数据规模小但五脏俱全. 步骤: 一. 创建图数据:将电影.导演.演员等图数据导入Neo4 ...

  6. 哈夫曼编码与解码的C++实现:建立哈夫曼树、进行哈夫曼编码与解码

    最近完成了数据结构课程设计,被分到的题目是<哈夫曼编码和解码>,现在在这篇博文里分享一下自己的成果. 我在设计时,在网上参考了很多老师和前辈的算法和代码,向他们表示感谢!他们的成果给了我很 ...

  7. LaTeX大全

    1.指数和下标可以用^和_后加相应字符来实现.比如: 2.平方根(square root)的输入命令为:\sqrt,n 次方根相应地为: \sqrt[n].方根符号的大小由LATEX自动加以调整.也可 ...

  8. markdown浅谈

    markdown是啥? markdown就是一种修饰网页/博客的方法,他能使网页变得更美观. 我们先解释一下代码框: 这个没法保留,就是把键盘左上角的⋅·⋅ 切换成英文变成`. 然后``` 在隔一行` ...

  9. php if语句

    一.前言 if语句 是几乎所有编程语言都有的函数. 当然我们最好的php这么最好的语言也有啦~ 二.搞起! 直接上代码不多哔哔.talk is cheap show me the code 2.1 i ...

  10. jenkins +Jmeter 完成分布式性能测试

    1.Jmeter 压测机器配置. 下载Jmeter 版本:https://jmeter.apache.org/download_jmeter.cgi   我下的是5.1.1 将下载后的版本进行解压. ...