• python基础(十)


    测试代码

    使用python模块unittest中的工具来测试代码,如何测试函数和类

     
    #测试函数
    #
    name_function.py def get_formatted_name(first, last): full_name = first + ' ' + last return full_name.title()
     
    from name_function import get_formatted_name
    
    print("enter 'q' at any time to quit.")
    
    while True:
    
        first = input("
    please 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("	name: " + formatted_name + '.')
      File "<ipython-input-6-cffaabe8f05a>", line 4
        first = input("
    please give me a first name:")
        ^
    IndentationError: unexpected indent
    
    
    
     
    '''
    enter 'q' at any time to quit.
    please give me a first name:peng
    please give me a last name:yuyan
        name: Peng Yuyan.
    please give me a first name:
    '''
     
    #单元测试和测试用例
    #单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。全覆盖式测试包含一整套单元测试,涵盖了各种可能的函数使用方式。
    #可通过的测试
    #test_name_function.py
    
    import unittest
    
    from name_function import get_formatted_name
    
    ​
    
    class NamesTestCase(unittest.TestCase):
    
        def test_first_last_name(self):
    
            formatted_name = get_formatted_name('janis','joplin')
    
            self.assertEqual(formatted_name, 'Janis Joplin')
    
    unittest.main()
     
    '''
    ----------------------------------------------------------------------
    Ran 1 test in 0.023s
    OK
    '''
     
    #不能通过的测试
    
    def get_formatted_name(first, middle, last):
    
        full_name = first + ' ' + middle + ' ' +last
    
        return full_name.title()
     
    '''
    E
    ======================================================================
    ERROR: test_first_last_name (__main__.NamesTestCase)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "D:/02-1python/2019.10.3-入门基础/20200630-从入门到实践/7.13-11/test_name_function.py", line 7, in test_first_last_name
        formatted_name = get_formatted_name('janis','joplin')
    TypeError: get_formatted_name() missing 1 required positional argument: 'last'
    ----------------------------------------------------------------------
    Ran 1 test in 0.049s
    FAILED (errors=1)
    '''
     
    #测试未通过时怎么办
    
    def get_formatted_name(first, last, middle = ''):
    
        if middle:
    
            full_name = first + ' ' + middle + ' ' +last
    
        else:
    
            full_name = first + ' ' +last
    
        return full_name.title()
     
    '''
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.046s
    OK
    '''
     
    #添加新测试
    
    import unittest
    
    from name_function import get_formatted_name
    
    ​
    
    class NamesTestCase(unittest.TestCase):
    
        def test_first_last_name(self):
    
            formatted_name = get_formatted_name('janis','joplin')
    
            self.assertEqual(formatted_name, 'Janis Joplin')
    
        def test_first_last_middle_name(self):
    
            formatted_name = get_formatted_name(
    
                'wolfgang', 'mozart', 'amadeus')
    
            self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')
    
    unittest.main()
     
    '''
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.045s
    OK
    '''
     
    #测试类
    
    #各种断言方法
    
    #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('- ' + response)
     
    #language_survey.py
    
    from survey import AnonymousSurvey
    
    ​
    
    question = "What language do you first learn to speak?"
    
    my_survey = AnonymousSurvey(question)
    
    ​
    
    my_survey.show_question()
    
    print("Enter 'q' at any time to quit.")
    
    while True:
    
        response = input("Language: ")
    
        if response == 'q':
    
            break
    
        my_survey.store_response(response)
    
    ​
    
    print("
    Thank you to everyone who participated in the survey!")
    
    my_survey.show_results()
     
    '''
    What language do you first learn to speak?
    Enter 'q' at any time to quit.
    Language: Chinese
    Language: English
    Language: French
    Language: q
    Thank you to everyone who participated in the survey!
    Survey results:
    - Chinese
    - English
    - French
    '''
     
    #测试AnonymousSurvey类
    
    #test_survey
    
    import unittest
    
    from survey import AnonymousSurvey
    
    ​
    
    class TestAnonymousSurvey(unittest.TestCase):
    
        """Tests for the class AnonymousSurvey"""
    
        def setUp(self):
    
            """
    
            Create a survey and a set of responses for use in all test methods.
    
            """
    
            question = "What language did you first learn to speak?"
    
            self.my_survey = AnonymousSurvey(question)
    
            self.responses = ['English', 'Spanish', 'Mandarin']
    
    ​
    
        def test_store_single_response(self):
    
            """Test that a single response is stored properly."""
    
            self.my_survey.store_response(self.responses[0])
    
            self.assertIn(self.responses[0], self.my_survey.responses)
    
    ​
    
        def test_store_three_responses(self):
    
            """Test that three individual responses are stored properly."""
    
            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()
     
    '''
    collecting ... collected 2 items
    test_survey.py::TestAnonymousSurvey::test_store_single_response PASSED   [ 50%]
    test_survey.py::TestAnonymousSurvey::test_store_three_responses PASSED   [100%]
    ========================== 2 passed in 0.02 seconds ===========================
    '''
  • 相关阅读:
    小组自评、互评及反馈
    "一个程序员的生命周期"读后感
    阅读《构建之法》第10-12章
    阅读《构建之法》第8,9,10章
    冒泡算法程序分析树的评论
    1014 C语言文法定义与C程序的推导过程
    0917 实验一词法分析程序
    0909 我与编译原理不得不说的秘密
    复利计算器4
    复利及单利计算
  • 原文地址:https://www.cnblogs.com/Cookie-Jing/p/13507514.html
Copyright © 2020-2023  润新知