Python 测试

作者: 赵者也 | 来源:发表于2018-01-27 18:10 被阅读25次

    Python 标准库中的模块 unittest 提供了代码测试工具。单元测试 用于核实函数的某个方面没有问题;测试用例 是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。全覆盖式测试 用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。

    1. 本文使用的模块代码:

    name_function.py 的代码:

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

    names.py 的代码:

    from LearnPythonRecord.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 + '.')
    
    
    1. 可通过的测试

    test_name_function.py 的代码如下

    # *- coding: utf-8 -*
    # Created by: ZhaoDongshuang
    # Created on: 2018/1/27
    
    import unittest
    
    from name_function import get_formatted_name
    
    
    class NameTestCase(unittest.TestCase):
    
        def test_first_last_name(self):
            self.assertEqual(get_formatted_name('janis', 'joplin'),
                             'Janis Joplin')
    
    
    if __name__ == '__main__':
        unittest.main()
    

    输出结果:

    可通过的测试输出结果
    1. 测试类

    survey.py 类:

    # *- coding: utf-8 -*
    # Created by: ZhaoDongshuang
    # Created on: 2018/1/27
    
    
    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 方法:

    # *- coding: utf-8 -*
    # Created by: ZhaoDongshuang
    # Created on: 2018/1/27
    
    from survey import AnonymousSurvey
    
    question = "What language did you first learn to speak?"
    my_survey = AnonymousSurvey(question)
    
    my_survey.show_question()
    print("Enter 'q' at any time to quit.\n")
    while True:
        response = input("Language: ")
        if response == 'q':
            break
        my_survey.store_response(response)
    
    print("\nThank you to everyone who participated in the survey!")
    my_survey.show_results()
    

    测试类 test_survey.py :

    # *- coding: utf-8 -*
    # Created by: ZhaoDongshuang
    # Created on: 2018/1/27
    
    import unittest
    
    from survey import AnonymousSurvey
    
    
    class TestAnonymousSurvey(unittest.TestCase):
        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)
    
    
    if __name__ == '__main__':
        unittest.main()
    

    测试输出:

    类的测试输出
    1. 方法 setUp()

    unittest.TestCase 类包含方法 setUp() ,让我 们只需创建这些对象一次,并在每个测试方法中使用它们。如果你在 TestCase 类中包含了方法 setUp() ,Python 将先运行它,再运行各个以 test_ 打头的方法。这样,在你编写的每个测试方法中都可使用在方法 setUp() 中创建的对象了。

    # *- coding: utf-8 -*
    # Created by: ZhaoDongshuang
    # Created on: 2018/1/27
    
    import unittest
    
    from survey import AnonymousSurvey
    
    
    class TestAnonymousSurvey(unittest.TestCase):
        def setUp(self):
            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):
            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)
    
    
    if __name__ == '__main__':
        unittest.main()
    

    本文参考自 《Python 编程:从入门到实践

    相关文章

      网友评论

        本文标题:Python 测试

        本文链接:https://www.haomeiwen.com/subject/mfcnaxtx.html