2017国家公务员考试行测备考:如何采用对代码进行测试
温馨提示:这篇文章已超过532天没有更新,请注意相关的内容是否还可用!
测试函数
首先是给出用于测试的代码,如下所示,这是一个接收姓和名之后返回整洁的姓名的函数:
def get_formatted_name(first, last):
full_name = first + ' ' + last
return full_name.title()
简单的测试代码:
first = 'kobe'
last = 'bryant'
print(get_formatted_name(first, last)) # 输出 Kobe Bryant
复制代码
在标准库中的组件提供了代码检测软件。这里介绍几个名词的意思:
一般,最初只必须对函数的重要行为编写测试即可,等项目被广泛使用时才考虑全覆盖。
接出来就开始介绍如何运用对代码进行检测。
首先是必须导出模块,然后建立一个继承.的类,并编写一系列类方式对函数的不同行为进行检测,如下代码所示:
import unittest
class NamesTestCase(unittest.TestCase):
'''
测试生成名字函数的类
'''
def test_first_last_name(self):
formatted_name = get_formatted_name('kobe', 'bryant')
self.assertEqual(formatted_name, 'Kobe Bryant')
unittest.main()
输出结果如下,显示运行的检测样例是1个,耗时是0.001s。
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
上述是给了一个可以借助的事例,而即使测试不借助php问卷源码,输出是如何的呢,如下所示:
# 添加中间名
def get_formatted_name(first, middel, last):
full_name = first + ' ' + middle + ' ' + last
return full_name.title()
class NamesTestCase(unittest.TestCase):
'''
测试生成名字函数的类
'''
# 不能通过的例子
def test_first_name(self):
formatted_name = get_formatted_name('kobe', 'bryant')
self.assertEqual(formatted_name, 'Kobe Bryant')
unittest.main()
输出结果如下,这里会打印错误出现的地方和出错原因:
E
======================================================================
ERROR: test_first_last_middle_name (__main__.NamesTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/Python_Notes/Practise/unittest_practise.py", line 39, in test_first_last_middle_name
formatted_name = get_formatted_name('kobe', 'bryant')
TypeError: get_formatted_name() missing 1 required positional argument: 'middle'
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
很显著是由于缺乏参数,如果期望借助测试,可以将原函数进行如下设置:
def get_formatted_name(first, last, middle=''):
'''
接收姓和名然后返回完整的姓名
:param first:
:param last:
:return:
'''
if middle:
full_name = first + ' ' + middle + ' ' + last
else:
full_name = first + ' ' + last
return full_name.title()
之后添加新的检测方式,继续运行,就可以测试通过。
def test_first_last_middle_name(self):
formatted_name = get_formatted_name('kobe', 'bryant', 'snake')
self.assertEqual(formatted_name, 'Kobe Snake Bryant')
测试类
上一小节介绍了给变量写测试的代码,接出来介绍如何编写针对类的检测。
断言方法
在.类中提供了这些断言方式,上一小节就采用了这一个判定给定两个参数是否相同的断定方法,下面给出常见的6个断言方式:
这种方式都没法在继承了.的类中使用这种方式。
编写针对类的检测
首先,编写用于进行检测的类,代码如下所示,这是一个用于管理匿名调查问卷答案的类:
class AnonymousSurvey():
'''
收集匿名调查问卷的答案
'''
def __init__(self, question):
'''
:param question:
'''
self.question = question
self.responses = []
def show_question(self):
'''
显示问卷
:return:
'''
print(self.question)
def store_response(self, new_response):
'''
存储单份调查问卷
:param new_response:
:return:
'''
self.responses.append(new_response)
def show_results(self):
'''
显示所有答卷
:return:
'''
print('Survey results:')
for response in self.responses:
print('- ' + response)
这个类包括三个步骤,分别是显示难题、存储单份问卷以及展现所有调查问卷,下面是一个使用实例:
def use_anonymous_survey():
question = "世上最好的语言是?"
language_survey = AnonymousSurvey(question)
# 显示问题
language_survey.show_question()
# 添加问卷
language_survey.store_response('php')
language_survey.store_response('python')
language_survey.store_response('c++')
language_survey.store_response('java')
language_survey.store_response('go')
# 展示所有问卷
language_survey.show_results()
if __name__ == '__main__':
use_anonymous_survey()
输出结果如下:
世上最好的语言是?
Survey results:
- php
- python
- c++
- java
- go
后来就开始编写对该类的检测代码,同样建立一个类,继承.,然后类方式进行检测,代码如下所示:
import unittest
class TestAnonmyousSurvey(unittest.TestCase):
def test_store_single_response(self):
'''
测试保存单份问卷的方法
:return:
'''
question = "世上最好的语言是?"
language_survey = AnonymousSurvey(question)
language_survey.store_response('php')
self.assertIn('php', language_survey.responses)
unittest.main()
上述代码引入了推测手段来检测变量()。
此处还可以再次检测是否存储更多的问卷,如下所示,测试存储三份问卷:
def test_store_three_response(self):
question = "世上最好的语言是?"
language_survey = AnonymousSurvey(question)
responses = ['c++', 'php', 'python']
for response in responses:
language_survey.store_response(response)
for response in responses:
self.assertIn(response, language_survey.responses)
最终,在.中虽然包括一个方式setUp(),它的作用类似类的初始化方式()__php问卷源码,它会在诸多以test_开头的方式运行前先运行,所以可以在这个方式里建立对象,避免在每个检测方式都必须创建一遍,所以上述代码可以设置为:
class TestAnonmyousSurvey(unittest.TestCase):
def setUp(self):
'''
创建一个调查对象和一组答案
:return:
'''
question = "世上最好的语言是?"
self.language_survey = AnonymousSurvey(question)
self.responses = ['c++', 'php', 'python']
def test_store_single_response(self):
'''
测试保存单份问卷的方法
:return:
'''
self.language_survey.store_response(self.responses[1])
self.assertIn('php', self.language_survey.responses)
def test_store_three_response(self):
for response in self.responses:
self.language_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.language_survey.responses)
运行后,输出结果如下:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
注意,这里运行顺利,打印一个句号,因为是运行两个检测方式顺利,所以打印了两个句号;即使运行错误,打印一个E;检测避免断言失败,打印一个F。
关注+转发。私信小编“零基础”获取全套零基础资料大礼包。
本文来自网络,如有侵权请联系网站客服进行删除
还没有评论,来说两句吧...