TDD流程,一个基于python django的例子

TDD流程

.功能测试

.单元测试

."单元测试/编写代码"循环

.重构

总体流程参考如图:

首先编写一个测试,运行测试看着失败,然后编写最少量的代码取得一些进展,再运行测试,循环直到成功为止

如果又有功能测试,又有单元测试,把功能测试当做循环高层视角,即编写程序让这个代码通过。

功能测试是应用能否运行的最终评判,而单元测试则是整个开发过程中的一个辅助工具

下面是一个例子:

使用TDD  Python Django开发一个网页,网页的的title是first_TDD,包含一个标签h1,h1内容为Hello World

新建一个django,里面包括一个app Helloworld

新建一个功能测试test1.py

from selenium import webdriver
import unittest
class Myunittest(unittest.TestCase):
   def setUp(self):#测试开始前运行
      self.browser=webdriver.Firefox()
   def tearDown(self):#测试开始后运行
      self.browser.quit()
   def test_can_start_a_list_and_retrieve_it_later(self):#测试的主要方法
      self.browser.get("http://127.0.0.1:8000")
      self.assertIn("first_TDD",self.browser.title)#断言
      head_text=self.browser.find_element_tag_name('h1').text
      self.assertIn("Hello World",head_text)#断言
      #self.fail("Finish test")#提前结束测试
      
if __name__=='__main__':
   unittest.main(warnings='ignore')#启动unittest测试程序

 运行功能测试出现错误:

AssertionError: 'first_TDD' not found in 'Django: the Web framework for perfectionists with deadlines.'

修改HelloWorld下的tests.py(自带单元测试)

from django.test import TestCase
from django.urls import resolve
from Helloworld.views import  hello
from django.template.loader import render_to_string
class HomepageTest(TestCase):
    def test_root_url_resolves_to_home_page_view(self):
        found = resolve('/')  # 测试网站url(这里是网站跟路径)的关系是否如愿
        self.assertEqual(found.func, hello)  # 看看是否能找到名为home_page的函数
    def test_home_page_returns_correct_html(self):
        respose=self.client.get('/')
        self.assertTemplateUsed(respose,'hello.html')#检测响应是用哪个模板渲染的

  

AttributeError: module 'Helloworld.views' has no attribute 'hello'

在Helloworld修改views.py

def hello(request):
       pass

循环单元测试 编写代码通过  直到功能测试通过  

最终在templates新建hello.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>first_TDD</title>
</head>
<body>
    <h1>Hello World</h1>
</body>
</html>

Helloworld下面的views.py

from django.shortcuts import render
def hello(request):
    return render(request,'hello.html')

 first_TDD下面的urls.py

from django.conf.urls import url
from Helloworld import views
urlpatterns=[
    url(r'^$',views.hello)
]

 最终单元测试运行 python manage.py test通过

Ran 2 tests in 0.007s

OK

功能测试python test1.py通过

---------------------------------------------------------------------
Ran 1 test in 7.483s

OK

整个开发流程完成

注意:我用pycharm创建的django   app加入不用修改settings.py,其他可能要 修改如下

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
’Helloworld‘,
]
既可以把创建的app注册入工程
 

 

猜你喜欢

转载自www.cnblogs.com/chenminyu/p/11728990.html