python基础学习笔记-测试

本文介绍Python单元测试的基础知识,包括如何编写测试用例、使用断言方法验证函数及类的行为,以及利用setUp()方法简化测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python单元测试

部分代码来自《python编程从入门到实践》一书

运行测试用例时,每完成一个单元测试,python都打印一个字符:测试通过打印一个句点,错误打印 E,测试导致断言失败打印一个 F

针对单个函数的测试:
  • 测试类继承unittest.TestCase—>class NameTestCase(unittest.TestCase):;测试方法以test_开头—>def test_first_last_name(self):
  • assertEqual()方法比较两个字符串是否相等(断言)
#name_function.py中
def get_formatted_name(first,last,middle=''):
    if middle:
        full_name = first + ' '  + middle + ' ' + last
    else:
        full_name = first + ' ' + last
    return full_name.title()


----------


#测试模块:test_name_function.py
import unittest
from name_function import get_formatted_name

class NameTestCase(unittest.TestCase):
    """测试name_function.py"""

    def test_first_last_name(self):
        """能够正确地处理像Janis joplin样的姓名吗"""
        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('wolgang','mozart','amadeus')
        self.assertEqual(formatted_name,'Wolgang Amadeus Mozart')

unittest.main()
  • unittest Module中的断言方法
  • asssertEqual(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中
测试类
#要测试的类在suevey.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("Survery results:")
        for response in self.responses:
            print('- ' + response)



----------



#测试的方法在test_suevey.py中
import unittest
from survey import AnonymousSurvey

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

    def test_store_single_response(self):    #用于测试的方法以test_开头,自动执行
        """测试单个答案会被妥善存储"""
        question = "what language did you first learn to speak?"
        my_survey = AnonymousSurvey(question)   #创建实例
        my_survey.store_response('English')   #存储答案

        self.assertIn('English',my_survey.responses)  #断言,指出要测试的是responses列表中是否包含'English'

         def test_store_three_responses(self):
        """测试三个答案会被妥善存储"""
        question = "what language did you first learn to speak?"
        my_survey = AnonymousSurvey(question)
        responses = ['English','Chinese','mandarin']
        for response in responses:
            my_survey.store_response(response)
        for response in responses:
            self.assertIn(response,my_survey.responses)

unittest.main()   
  • setUp()方法:
    unittest.TestCase类中包含方法setUp(),让我们只需创建这些对象一次并在每一个测试方法中使用它们,如果在TestCase类中包含了方法setUp(),python将先运行setUp()方法再运行test_开头的方法

  • 加入setUp()方法的test_suevey.py模块(注意与上面对比)

import unittest
from survey import AnonymousSurvey

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

    def setUp(self):
        """创建一个调查对象和一组答案,供使用的测试方法使用"""
        question = "what language did you first learn to speak?"
        self.my_survey = AnonymousSurvey(question)    
        self.responses = ['English','Chinese','mandarin']

    def test_store_single_response(self):    #用于测试的方法以test_开头,自动执行
        """测试单个答案会被妥善存储"""
        self.my_survey.store_response(self.responses[0])   #存储答案
        self.assertIn(self.responses[0],self.my_survey.responses)  #断言,指出要测试的是responses列表中是否包含'English'

    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()   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值