Python笔记-015-测试代码

编写函数或类时,还可为其编写测试。通过测试,可确定代码面对各种输入都能够按要求的那样工作。
1.15.1 测试函数
name_function.py

def get_formatted_name(first,last,middle=''):
    """Generate a neatly formatted full name"""
    if middle:
        full_name = first + ' ' + middle + ' ' + last
    else:
        full_name = first + ' ' + last
    return full_name.title()

def get_formatted_name(first,last,middle=”): 用于让用户输入名和姓,然后输出完整整洁的全名
我们可以针对这个函数进行测试
name

测试类

class NamesTestCase(unittest.TestCase):
   """"测试name_function.py"""
   def test_first_last_name(self):
       formatted_name =get_formatted_name('gonathan','guo')
       self.assertEqual(formatted_name,'Gonathan Guo')

   def test_first_middle_last_name(self):
       formatted_name=get_formatted_name('wolfgang','mozart','amadeus')
       self.assertEqual(formatted_name,"Wolfgang Amadeus Mozart")

测试OK 的结果

..

Ran 2 tests in 0.000s

OK
上面输出表面,只要用户输入姓 跟 名就能准备返回整洁的全名
然后我们修改函数,看看如果不能测试通过会返回什么呢?

def get_formatted_name(first,last,middle):
    full_name=first+' '+middle+' '+last
    return full_name.title()
E.
======================================================================
ERROR: test_first_last_name (__main__.NamesTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:/Python_Study/python_charm/pycharm_study.py", line 1235, in test_first_last_name
    formatted_name =get_formatted_name('gonathan','guo')
TypeError: get_formatted_name() missing 1 required positional argument: 'middle'

测试类
前面的例程是为了测试函数,接下来我们尝试我们用的比较多的类
一个要测试的类

class AnonymousSurvey():
    def __init__(self,question):
        self.question=question
        self.responses=[]
    def show_quetion(self):
        print(self.question)
    def store_response(self,new_response):
        """存储淡粉调查问卷"""
        self.responses.append(new_response)
    def show_results(self):
        """""显示收集到的所有答案"""
        print("Survey results:")
        for response in self.responses:
            print("- "+response)

为证明AnonymousSurvey类能够正确的工作,我们编写一个使用它的程序
language_survey.py


from car import AnonymousSurvey
question="What language did you first learn to speak?"
my_survey= AnonymousSurvey(question)

my_survey.show_quetion()
print("Enter 'q' at any time to quit.\n")
while True:
    response=input("Language: ")
    if response== 'q':
        break
    my_survey.store_response(response)
#显示调查结果
print("\n Thank you to everyone who participated in the survey!")
my_survey.show_results()

输出结果
What language did you first learn to speak?
Enter ‘q’ at any time to quit.

Language: China
Language: English
Language: Spanish
Language: Q
Language: q

Thank you to everyone who participated in the survey!
Survey results:
- China
- English
- Spanish

- Q

* 测试AnonymousSurvey类*

import  unittest
from car import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
    """""针对AnonymousSurvey类测试"""""
    def test_store_single_response(self):
        """"测试单个答案是否会被妥善存储"""
        question = "What language did you first learn to speak?"
        my_survey = AnonymousSurvey(question)
        my_survey.store_response('English')

        self.assertIn('English',my_survey.responses)
unittest.main()

.

Ran 1 test in 0.001s

OK
收集到一个答案调差用处不大,我们提供到三个答案测试

import  unittest
from car import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
    """""针对AnonymousSurvey类测试"""""
    def test_store_single_response(self):
        """"测试单个答案是否会被妥善存储"""
        question = "What language did you first learn to speak?"
        my_survey = AnonymousSurvey(question)
        my_survey.store_response('English')

        self.assertIn('English',my_survey.responses)
    def test_store_three_response(self):
        """"测试单个答案是否会被妥善存储"""
        question = "What language did you first learn to speak?"
        my_survey = AnonymousSurvey(question)
        responses = ['English','Spanish','Mandarin']
        for response in responses:
            my_survey.store_response(response)
        for response in responses:
            self.assertIn(response, my_survey.responses)

        self.assertIn('English',my_survey.responses)
unittest.main()

..

Ran 2 tests in 0.000s

OK

猜你喜欢

转载自blog.csdn.net/qq_35989861/article/details/82432420