码迷,mamicode.com
首页 > 编程语言 > 详细

Python项目中的单元测试

时间:2019-08-16 16:57:36      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:obj   tin   ice   hellip   database   例子   create   add   执行   

引入

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

 

一个简单的测试例子

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

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

class MyClass(object):
    """just a test case"""
    def __init__(self, x, y):
        self.x = int(x)
        self.y = int(y)

    def add(self):
        return self.x + self.y

    def sub(self):
        return self.x - self.y

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

import unittest
from m1 import MyClass


class MyClassTest(unittest.TestCase):
    def setUp(self):
        self.calc = MyClass(7, 5)

    def tearDown(self):
        pass

    def test_add(self):
        ret = self.calc.add()
        self.assertEqual(ret, 12)

    def test_sub(self):
        ret = self.calc.sub()
        self.assertEqual(ret, 2)


if __name__ == __main__:
    # 构造测试集
    suite = unittest.TestSuite()
    suite.addTest(MyClassTest(test_add))
    suite.addTest(MyClassTest(test_sub))
    # 执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

运行测试:

demo1 $ python3 test.py 
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

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:

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

测试用例代码:

# app01/tests.py
from django.test import TestCase
from app01.models import Book
# Create your tests here.


class BookModelTest(TestCase):
    def setUp(self):
        Book.objects.create(title=书名, price=11.11)

    def test_book_model(self):
        from decimal import Decimal
        result = Book.objects.get(title=书名)
        self.assertEqual(result.price, Decimal(11.11))

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

$ python3 manage.py test
Creating test database for alias default...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.003s

OK
Destroying test database for alias default...

测试用例OK…

视图部分单元测试用例

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

def index(request):
    return render(request, index.html)

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

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

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

$ python3 manage.py test
Creating test database for alias default...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.027s

OK
Destroying test database for alias default...

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

Python项目中的单元测试

标签:obj   tin   ice   hellip   database   例子   create   add   执行   

原文地址:https://www.cnblogs.com/peng104/p/11364927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!