第十三周:测试代码

第十三周:测试代码

1.测试函数

单元测试:用于核实函数的某方面没有问题

测试用例:一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求

Python 标准库中的模版 unittest 提供了代码测试工具

#要实现的函数
def get_formatted_name(first,last):
    """生成整洁的姓名"""
    full_name = first + ' ' + last
    return full_name.title()
#从name_function模版中导入get_formatted_name函数
from name_function import get_formatted_name
print("Enter 'q' at any time to quit.")
while True:
    first = input("\nPlease give me a first name: ")
    if first == 'q':
        break
    last = input("Please give me a last name: ")
    if last == 'q':
        break

    formatted_name = get_formatted_name(first,last)
    print("\tNeatly formatted name: " + formatted_name + '.') 
import unittest
from name_function import get_formatted_name

class NamesTestVase(unittest.TestCase):#新类必须继承unittest.TestCase类
    """测试name_function.py"""

    """方法,当我们运行test_nmae_function.py时,所有以test_打头的方法都将自动运行"""
    def test_first_last_name(self):
        """能够正确的处理像Janis Joplin这样的姓名吗?"""
        formatted_name = get_formatted_name('janis','joplin')#调用get_formatted_name方法,并将结果存储到变量formatted_name中
        self.assertEqual(formatted_name,'Janis Joplin')#unittest类中的断言方法,核实是否与期望值一致
        """将formatted_name与期望值Janis Joplin比较"""

unittest.main()

"""
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
"""
#要实现的函数
def get_formatted_name(first,middle,last):
    """生成整洁的姓名"""
    full_name = first + ' ' + middle + ' ' + last
    return full_name.title()

"""
E
======================================================================
ERROR: test_first_last_name (__main__.NamesTestVase.test_first_last_name)
能够正确的处理像Janis Joplin这样的姓名吗?
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/chuji/Desktop/个人/计算机/Sublime Text/Python/my_car.py", line 10, in test_first_last_name
    formatted_name = get_formatted_name('janis','joplin')#调用get_formatted_name方法,并将结果存储到变量formatted_name中
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: get_formatted_name() missing 1 required positional argument: 'last'

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (errors=1)
"""

2.测试类

各种断言方法

方法

用途

assertEqual(a,b)

核实 a==b

assertNotEqual(a,b)

核实 a!=b

assertTrue(x)

核实 x 为 True

assertFalse(x)

核实 x 为 False

assertIn(item,list)

核实 item 在 list 中

assertNotIn(item,list)

核实 item 不在 list 中

class AnonymousSurvey():
    """收集匿名调查问卷的答案"""

    def __init__(self,question):
        """存储一个问题,并为储存答案做准备"""
        self.question = question
        self.responses = []

    def show_question(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)
from survey import AnonymousSurvey

#定义一个问题,并创建一个表示调查的AnonymousSurvey对象
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)

#显示问题并存储答案
my_survey.show_question()
print("Enter 'q' at any time quit.\n")
while True:
    response = input("Language: ")
    if respense == 'q':
        break
    my_survey.store_response(response)

#显示调查结果
print("\nThank you to everyon who participated in the survey!")
my_survey.show_results()
#surver == 调查
import unittest
from survey 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_responses(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)

unittest.main()

3.方法 setUp()

如果你在 TestCase 类中包含了方法 setUP(),Python 将先执行它,再运行各个以 test_ 打头的方法

import unittest
from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):
    """针对AnonymousSurvey类的测试"""

    def setUp(self):
        """
        创建一个调查对象和一组答案,供使用的测试方法使用
        """
        question = "What language did you first learn to speak?"
        """前缀为self代表存储在属性中"""
        self.my_survey = AnonymousSurvey(question)#创建调查对象
        self.responses = ['English','Spanish','Mandarin']#创建答案列表

    def test_store_single_response(self):
        """测试单个答案会被妥善的存储"""
        self.my_survey.store_response(self.responses[0])
        self.assertIn(self.responses[0],self.my_survey.responses)

    def test_store_three_responses(self):
        """测试三个答案会被妥善地存储"""
        for response in self.responses:
            self.my_survey.store_response(response)
        for response in self.responses:
            self.assertIn(response,self.my_survey.responses)

unittest.main()

"""
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
"""

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值