• python之测试类


    各种断言方法:

    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}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    为了证明 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}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    你会那些语言?
    Enter 'q' at any time to quit.
    
    lanuage:汉语
    lanuage:法语
    lanuage:西班牙语
    lanuage:q
    
    谢谢你参与到本次调查之中!
    Survey results
    -汉语
    -法语
    -西班牙语
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    测试 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试通过!

    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    具体操作如下:

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK
    
    • 1
    • 2
    • 3
    • 4
    • 5

    两个测试都通过了,但是该测试不够简洁,下面我们用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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

  • 相关阅读:
    Bridge Champ助力我国桥牌阔步亚运, Web3游戏为传统项目注入创新活力
    python爬取深交所各行业前三上市公司市值
    正则表达式语法与应用案例
    FPGA设计时序约束七、设置时钟不确定约束
    基于SSM的超市管理系统
    NB!移动端APP自动化安全分析平台
    【MAPBOX基础功能】18、mapbox添加pbf矢量切片图层
    Js的三大核心之DOM
    交叉编译BusyBox
    现代_复习_第2章:矩阵
  • 原文地址:https://blog.csdn.net/m0_64365419/article/details/125983098