python之测试类

导读:本篇文章讲解 python之测试类,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

作者:从未止步…

博客主页:从未止步的博客

专栏:和我一起学Python

语录:Every day is a second chance

行动是理想最高贵的表达,给大家介绍一款超牛的斩获大厂offer利器——牛客网

快来和我一起刷题吧!!!
在这里插入图片描述

各种断言方法:

python在unittest.TestCase类中提供了很多断言的方法,前面说过,断言方法是用来检验该满足的条件是否得到满足,如果该条件确实得到了满足,那么程序行为的假设就得到了确认,可以确定其中没有错误。如果我们认为应该满足的条件实际上并不满足,python将引发异常。

常见的断言的方法:

g使用这些方法可核实返回的值等于或不等于预期的值,返回的值为True或False,以及返回的值在列表中或不在列表中。
只能在继unittest.TestCase的类中使用这些方法,随后来看看如何在测试类时可使用其中之一。

一个要测试的类:

类的测试与函数的测试相似,你所做的大部分工作是测试类中的方法的行为。不过还是存在一些不同之处
举例:

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(f"-{response}")

要创建该类的实例,只需要提供一个问题即可。

为了证明 AnonymousSurvey类能够正确工作,编写一个使用它的程序:

survey.py

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(f"-{response}")

language_survey.py

from test_name_function import AnonymousSurvey
question="你会那些语言?"
my_survey=AnonymousSurvey(question)
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:
    response=input("lanuage:")
    if response=='q':
        break
    my_survey.store_response(response)
print("\n谢谢你参与到本次调查之中!")
my_survey.show_results()
你会那些语言?
Enter 'q' at any time to quit.

lanuage:汉语
lanuage:法语
lanuage:西班牙语
lanuage:q

谢谢你参与到本次调查之中!
Survey results
-汉语
-法语
-西班牙语

测试 AnonymousSurvey类:

下面编写一个测试,对 AnonymousSurvey类的行为的一个方面进行验证,如果用户面对调查问题只提供一个答案,这个答案被存储起来,现在我们通过使用assertIn()验证该答案确实在答案列表中。

import unittest#导入测试模块
from test_name_function import AnonymousSurvey#导入测试的类
class TestAnonymousSurvey(unittest.TestCase):#针对TestAnonymousSurvey的测试
    def test_store_singnle_response(self):#测试的方法
        question="你会哪些语言?"
        my_survey=AnonymousSurvey(question)
        my_survey.store_response('汉语')#传递单独的语言
        self.assertIn('汉语',my_survey.responses)#核实汉语是否在list中
if __name__=='__main__':
    unittest.main()

测试通过!

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

OK

但如果想实现测试两个及以上的语言是否在其中呢?

具体操作如下:

import unittest#导入测试模块
from test_name_function import AnonymousSurvey#导入测试的类
class TestAnonymousSurvey(unittest.TestCase):#针对TestAnonymousSurvey的测试
    def test_store_singnle_response(self):#测试单一语言是否被存储的方法
        question="你会哪些语言?"
        my_survey=AnonymousSurvey(question)
        my_survey.store_response('汉语')#传递单独的语言
        self.assertIn('汉语',my_survey.responses)#核实汉语是否在list中
    def test_store_three_response(self):#测试多个语言是否被存储的方法
        question="你会那些语言?"
        my_survey=AnonymousSurvey(question)
        responses=["英语","汉语","西班牙语"]
        for response in responses:
            my_survey.store_response(response)
        for response in responses:
            self.assertIn(response,my_survey.responses)

if __name__=='__main__':
    unittest.main()
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

两个测试都通过了,但是该测试不够简洁,下面我们用unittest的另一种方法进行改进。

方法setUp():

import unittest#导入测试模块
from test_name_function import AnonymousSurvey#导入测试的类
class TestAnonymousSurvey(unittest.TestCase):#针对TestAnonymousSurvey的测试
    def setUp(self):#在unittest.TestCase类中包含的setUp方法,创建调查对象和答案列表
    #使下面的测试方法不用自主进行对象的创建和答案的生成
        question="你会哪些语言?"
        self.my_survey=AnonymousSurvey(question)
        self.responses=["英语","汉语","西班牙语"]
    def test_store_singnle_response(self):#测试单一语言是否被存储的方法
        self.my_survey.store_response(self.responses[0])
        self.assertIn(self.responses[0],self.my_survey.responses)#核实self.responses[0]是否在list中
    def test_store_three_response(self):#测试多个语言是否被存储的方法
        for response in self.responses:
            self.my_survey.store_response(response)
        for response in self.responses:
            self.assertIn(response,self.my_survey.responses)
if __name__=='__main__':
    unittest.main()
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

注意:运行测试用例时,每完成一个单元测试,Python都打印一个字符,测试通过时打印一个句点,测试引发错误时,打印一个E,而测试导致断言失败时,则打印一个F,这就是你运行测试用例时,在输出的第1行中看到的句点和字符数量各不相同的原因,如果测试用例包含很多单元测试,需要运行很长时间就可以观察这些结果来获悉有多少个测试通过了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81477.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!