DAY9 python学习 测试代码

测试代码

 

一.测试函数

测试函数如下:
name_function.py

def get_complete_name(first,last):
    """ 形成完整的姓名 """
    full_name=first+' '+last
    return full_name.title()

names.py.

from name_function import get_complete_name

print("输入'quit'退出输入")
while True:
    first=input("请输入姓:")
    if first=='quit':
        break
    last=input('请输入名:')
    if last=='quit':
        break

    full_name=get_complete_name(first,last)
    print("您的姓名是:"+full_name)

1.单元测试和测试用例

Python标准库中的模块unittest提供了代码测试工具。单元测试用于测试函数的某个方面是否存在问题。测试用例是一组单元测试,这些测试一起核实函数在各种情形下的行为都是符合要求的。
test_name_function.py

import unittest
from name_function import get_complete_name

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

    def test_first_last_name(self):
        """测试函数get_complete_name()能否形成完整姓名"""
        full_name=get_complete_name('yao','ming')
        self.assertEqual(full_name,'Yao Ming')

unittest.main()

(1)先导入unittest模块和被测试的函数。
(2)再创建一个继承自unittest.TestCase的类。类名命名可随意,但最好与被测试函数相关且包含字样Test。
(3)在类中编写一系列方法对函数的不同方面进行测试。测试方法命名以test_开头,这个命名约定告诉测试运行者类的哪些方法表示测试。之后在运行当前.py文件时,这些以test_开头的方法都会自动运行。
(4)assertEuqual()是unittest中的一个断言方法,用于核实所得结果是否与预期的结果一致。
(5)unittest.main() 提供了一个测试脚本的命令行接口,让Python运行这个文件中的测试。
 

2.通过的测试

测试结果为:

.
----------------------------------------------------------------------
Ran 1 test in 0.003s

OK

(1)第一行一个句点表示有一个测试通过。
(2)第二行指出Python运行了一个测试,耗时不到0.001s。
(3)最后的OK表示测试用例中的所有测试都通过了。
 

3.未通过的测试

用E表示一个未通过的测试,最后FAILED指出运行测试用例时发生了几个错误。
 
 

二.测试类

survey_test.py

class Survey():
    """调查问卷"""

    def __init__(self,question):
        """存储一个调查问题,并为调查结果的存储做准备"""
        self.question=question
        self.answer=[]

    def show_question(self):
        """显示调查的问题"""
        print(self.question)

    def store_answer(self,response):
        self.answer.append(response)

    def show_answer(self):
        print("调查结果如下")
        for dana in self.answer:
            print('-'+dana)

test.py

import unittest
from survey_test import Survey

class SurveyTestCase(unittest.TestCase):
    """测试survey_test.py"""

    def setUp(self):
        """创建调查问题和调查答案,以供测试使用"""
        question='请告诉我你学过的课程:'
        self.my_question=Survey(question)
        self.answer=['chinese','math','science','biology']

    def test_store_single(self):
        """检查单个调查结果是否被妥善存储"""
        self.my_question.store_answer(self.answer[0])
        self.assertIn(self.answer[0],self.my_question.answer)

    def test_store_each(self):
        """检查每个调查结果是否被妥善存储"""
        for response in self.answer:
            self.my_question.store_answer(response)
        for response in self.my_question.answer:
            self.assertIn(response,self.my_question.answer)

unittest.main()

测试结果:

..
----------------------------------------------------------------------
Ran 2 tests in 0.006s

OK

1.各种断言方法

方法用途
assertEqual(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中

2.方法setUp()

在对类进行测试时,需要在每个测试方法中创建一个实例,这样做往往效率不高。因而,可以使用unittest.TestCase类中的方法setUp(),只需要创建实例一次,并在每个测试方法中用到这些实例。如果在unittest.TestCase的子类中包含了方法setUp(),Python将先运行它,再去运行以test_开头的各个测试方法。(具体见上述测试例)

3.小结

运行测试用例时,每完成一个单元测试,Python都打印一个字符:(每个测试都会有一个字符返回)

  • 测试通过时,打印一个句点;
  • 测试引发错误时,打印一个E;
  • 测试导致断言失败时,打印一个F。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值