我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用Django进行测试驱动开发

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用Django进行测试驱动开发

本篇内容介绍了“如何使用Django进行测试驱动开发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

所谓测试驱动开发(TDD),就是先编写测试用例,然后编写代码来满足测试用例,具体包含以下步骤:

  • 编写测试用例。

  • 编写代码满足测试用例中的需求。

  • 运行测试用例。

  • 如果通过,说明代码满足了测试用例所定义的需求。

  • 如果未通过,则需要重构代码,直到通过。

  • 重复以上步骤,直到通过全部的测试用例。

通常情况下,我们都是先写代码,然后编写测试用例,因此测试驱动开发是反直觉的,那为什么还要这么做呢?基于以下几点原因:

  1. TDD 可以被认为是根据测试用例来说明需求。此后编写源代码,重点是满足这些要求。当测试最终通过时,你可以确信已满足要求。这种专注可以帮助开发人员避免范围蔓延。

  2. TDD 可以通过较短的开发周期提高开发效率。一次解决测试用例中的个别需求可以最大限度地减少干扰因素。重大更改将更容易跟踪和解决,减少了调试工作,提高了效率,并且将更多时间花在开发上。

  3. 编写测试时考虑到了需求。正因为如此,它们更有可能被写成明确的,可以理解的。这样的测试可以作为代码库的优质文档。

  4. 先编写测试用例可确保您的源代码始终具有可测试性,它还保证随着代码库的增长,测试覆盖率始终保持在合理的百分比。

然而,测试驱动开发也不是银弹,以下情形并不适合测试驱动开发:

  • 当需求不明确时,有时续期会随着开发的进行而逐渐明确,在这种情况下最初编写的任何测试可能会过时。

  • 开发的目的是为了证明某一概念时——例如在黑客马拉松期间,测试通常不是优先事项。

了解了测试驱动开发之后,我们用 Django 来演示一下测试驱动开发的过程。(Python 3.7 以上,Django 2.0 以上)

首先描述需求,我们要实现这样一个单位换算功能的 Web 应用,可以在厘米、米、英里直接互相转换,Web 界面如图所示:

如何使用Django进行测试驱动开发

如何使用Django进行测试驱动开发

创建项目

首先,我们创建一个名字叫 convert 的项目:

pip install djangodjango-admin startproject converter

此时 Django 已经为我们生成了 converter 目录及基本的项目文件:

converter/    converter/        __init__.py        settings.py        urls.py        wsgi.py    manage.py

然后,进入 converter 目录,创建一个名字叫 length 的 app:

cd converterpython manage.py startapp length

然后你会看到这样的目录结构:

converter/    converter/        __init__.py        settings.py        urls.py        wsgi.py    length/        __init__.py        admin.py        apps.py        migrations/            __init__.py        models.py        tests.py        views.py    manage.py

配置 app

修改 converter/settings.py,在 INSTALLED_APPS 里加入 lengh :

INSTALLED_APPS = [    .    .    .    'length',]

然后在 length 目录下新建 urls.py,写入以下内容:

from django.urls import pathfrom length import viewsapp_name = 'length'urlpatterns = [    path('convert/', views.convert, name='convert'),]

最后在 converter/urls.py 中指向 length/urls.py:

from django.contrib import adminfrom django.urls import path, includeurlpatterns = [    path('admin/', admin.site.urls),    path('length/', include('length.urls')),]

这样一个没有任何业务逻辑的项目就创建成功了,接下来编写测试用例:

编写测试用例

在 lengh 目录下新建 tests.py,写入以下内容:

from django.test import TestCase, Clientfrom django.urls import reverseclass TestLengthConversion(TestCase):    """    This class contains tests that convert measurements from one    unit of measurement to another.    """    def setUp(self):        """        This method runs before the execution of each test case.        """        self.client = Client()        self.url = reverse("length:convert")    def test_centimetre_to_metre_conversion(self):        """        Tests conversion of centimetre measurements to metre.        """        data = {            "input_unit": "centimetre",            "output_unit": "metre",            "input_value": 8096.894        }        response = self.client.get(self.url, data)        self.assertContains(response, 80.96894)    def test_centimetre_to_mile_conversion(self):        data = {            "input_unit": "centimetre",            "output_unit": "mile",            "input_value": round(985805791.3527409, 3)        }        response = self.client.get(self.url, data)        self.assertContains(response, 6125.5113)

上述代码有两个测试用例,分别代表两个需求。test_centimetre_to_metre_conversion 代表厘米转米的需求,而 test_centimetre_to_mile_conversion 代表厘米转英里的需求。

编写代码

这和 Django 开发没什么两样,先编写一个 forms.py,内容如下:

from django import formsclass LengthConverterForm(forms.Form):    MEASUREMENTS = (        ('centimetre', '厘米'),        ('metre', '米'),        ('mile', '英里')    )    input_unit = forms.ChoiceField(choices=MEASUREMENTS)    input_value = forms.DecimalField(decimal_places=3)    output_unit = forms.ChoiceField(choices=MEASUREMENTS)    output_value = forms.DecimalField(decimal_places=3, required=False)

然后编写 html,在 length 目录下新建 templates/length.html,内容如下:

<html lang="en">  <head>    <title>Length Conversion</title>  </head>  <body>    <form action={% url "length:convert" %} method="get">      <div>        {{ form.input_unit }}        {{ form.input_value }}      </div>      <input type="submit" value="转换为:"/>      <div>        {{ form.output_unit }}        {{ form.output_value }}      </div>   </form>  </body></html>

然后编写最重要的视图函数 views.py,内容如下:

from django.shortcuts import renderfrom length.forms import LengthConverterFormconvert_to_metre = {    "centimetre": 0.01,    "metre": 1.0,    "mile": 1609.34}convert_from_metre = {    "centimetre": 100,    "metre": 1.0,    "mile": 0.000621371}# Create your views here.def convert(request):    form = LengthConverterForm()    if request.GET:        input_unit = request.GET['input_unit']        input_value = request.GET['input_value']        output_unit = request.GET['output_unit']        metres = convert_to_metre[input_unit] * float(input_value)        print(f"{metres = }, {input_value = }")        output_value = metres * convert_from_metre[output_unit]        data = {            "input_unit": input_unit,            "input_value": input_value,            "output_unit": output_unit,            "output_value": round(output_value,5)        }        form = LengthConverterForm(initial=data)        return render(            request, "length.html", context={"form": form})    return render(        request, "length.html", context={"form": form})

执行测试

执行策四并不需要启动 django 的 runserver:

如何使用Django进行测试驱动开发

出现 OK 说明测试通过,启动 django:

python manage.py runserver

打开浏览器,访问 http://localhost:8000/length/convert/ 即可看到界面:

如何使用Django进行测试驱动开发

“如何使用Django进行测试驱动开发”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用Django进行测试驱动开发

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用Django进行测试驱动开发

本篇内容介绍了“如何使用Django进行测试驱动开发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓测试驱动开发(TDD),就是先编写测试
2023-06-21

C++开发建议:如何进行C++测试驱动开发

C++是一种高效、可靠、可扩展性强的编程语言,适合用于开发各种类型的软件。在开发C++应用程序时,测试驱动开发(TDD)是一种可行的方法,可以确保代码的质量并提高开发效率。本文将介绍如何进行C++测试驱动开发。理解测试驱动开发测试驱动开发是
C++开发建议:如何进行C++测试驱动开发
2023-11-22

Golang开发经验分享:如何进行高效的测试驱动开发

Golang是一种非常流行的编程语言,其在Web开发、云计算和互联网领域具有广泛的应用。而测试驱动开发(Test Driven Development,简称TDD)则是一种开发方式,它可以帮助我们在开发过程中更高效、更精确地编写代码。那么,
Golang开发经验分享:如何进行高效的测试驱动开发
2023-11-22

Golang开发经验分享:如何进行高效的测试驱动开发和单元测试

在Golang开发中,测试驱动开发和单元测试是非常重要的一环。测试驱动开发(TDD)是一种软件开发方法,其中测试在编写代码之前编写,并且在编写的代码通过测试之前也无法编译。而单元测试则是在代码编写完成后对代码某一小部分进行测试,以确保这一小
Golang开发经验分享:如何进行高效的测试驱动开发和单元测试
2023-11-22

如何进行RK3399 camera驱动开发

如何进行RK3399 camera驱动开发,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android camera驱动开发概述目前板子上有两路mipi rx,
2023-06-05

Java如何使用JMeter进行高并发测试

这篇文章主要介绍了Java如何使用JMeter进行高并发测试,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。软件的压力测试是一种保证软件质量的行为.在金融,电商等领域应用比较普
2023-06-25

Android应用开发中如何进行单元测试

本文主要和大家分享如何在Android应用开发过程中如何进行单元测试,个人在做项目的过程中,觉得单元测试很有必要,以保证我们编写程序的正确性。下面我们先大概了解下单元测试,以及单元测试的作用。 单元测试(又称为模块测试)是针对程序模块(
2022-06-06

C#中如何使用单元测试框架进行自动化测试

C#中如何使用单元测试框架进行自动化测试引言:在软件开发过程中,自动化测试是一个非常重要的环节。通过编写和运行测试代码,可以帮助我们验证和确保代码的正确性和稳定性。在C#开发中,我们可以使用单元测试框架来实现自动化测试。本文将介绍C#中常用
2023-10-22

golang函数的测试驱动开发流程如何实现?

tdd 流程有助于确保 go 函数的正确性和行为文档。步骤:1) 编写使用 go test 命令的测试,定义函数和测试用例。2) 编写满足测试用例行为的函数代码。3) 运行 go test 命令验证函数是否符合预期。4) 根据需要重复步骤
golang函数的测试驱动开发流程如何实现?
2024-04-29

如何使用Gateling进行性能测试

这篇文章主要讲解了“如何使用Gateling进行性能测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Gateling进行性能测试”吧!Gatling是什么?Gatling 是一个用
2023-06-02

如何使用 PHP 进行单元测试?

单元测试检查软件的最小构成部分(如函数、方法),php 可通过 phpunit 框架进行单元测试。首先安装 phpunit,然后创建测试类(扩展自 testcase),再编写以 "test" 开头的测试方法,使用 assertequals
如何使用 PHP 进行单元测试?
2024-04-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录