用人话概况Python基础(八):测试代码

用人话概况Python基础(八):测试代码

背景介绍

由于测试代码是参与工作量较大的项目时,是非常重要的行为,但作为初学者来说,并非必须为每一个项目代码编写测试,所以本文就简单的介绍

在项目中包含初步测试的代码,很容易得到别人的赞扬,因为别人可以更加方便的测试你的项目,因此在今后对重要的代码块编写测试是一种不错的良好习惯

由于是测试代码,所以就得有测试案例,假设有个测试案例如下:
在这里插入图片描述

  • 首先在当前目录下创建一个名为name_fun.py的文件
#coding=gbk
def get_test_name(first, last):
    """测试名字的代码"""
    full_name = first + ' ' + last
    return full_name.title()

  • 再同级目录中再创建names.py执行文件
#coding=gbk
from name_fun import get_test_name 

while True:
   first = raw_input("请输入您的姓:")
   if first == 'q':
       break
   last = raw_input('请输入您的名:')
   if last == 'q':
       break

   full_name = get_test_name(first, last) 
   print(full_name)


单元测试和测试用例:

  • Python标准库中的模块unittest 提供了代码测试工具;
  • 单元测试用于核实函数的某个方面没有问题
  • 测试用例是用来核实函数在各种情形下的行为是否符合要求
  • 断言(Assertion)是一种调试程序的方式。

通过测试

  • 用于测试name_fun.py代码的文件

文件名:test_name_fun.py

#coding=gbk
import unittest

from name_fun import get_test_name

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

    def test_first_last_name(self):
        """能够正确的处理姓名"""

        full_name = get_test_name('lin', 'xiao')
        self.assertEqual(full_name, 'Lin Xiao')

unittest.main()
#编译结果
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK


------------------
(program exited with code: 0)

请按任意键继续. . .

案例分析:
①我们首先导入模块unittest 以及要测试的函数,再创建一个继承unittest.TestCase 的类
②我们创建了一个名为NamesTestCase 的类(名字要有意义),这个类必须继承unittest.TestCase 类,这样Python才会知道如何运行你编写的代码
③方法assertEqual()是unittest类中最有用的功能之一,,是一种断言方法。断言方法是用来核实得到的结果是否与期望的结果一样
④assertEqual(a,b)有两个实参,是用来核实是否满足“a == b”这个条件的
⑤unittest.main()调用这句话, unittest.main()会提供了一个测试脚本的命令行接口,将会生成特定输出格式。
⑥在输出格式中,我们可以看到ok,表示代码测试成功。
⑦在第一行有一个点,代表着有一个测试案例成功,并且在【Ran 1 test in 0.001s】也告诉了我们有1个test案例

测试不通过

我们来看下测试不通过的情况

#coding=gbk
import unittest

from name_fun import get_test_name

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

    def test_first_last_name(self):
        """能够正确的处理姓名"""
		#在此处故意传入的是xidao,另assertEqual(a,b)方法中的a != b
        full_name = get_test_name('lin', 'xidao')
        self.assertEqual(full_name, 'Lin Xiao')

unittest.main()

#编译执行结果
F
======================================================================
FAIL: test_first_last_name (__main__.NamesTestCase)
能够正确的处理姓名
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_name_fun.py", line 13, in test_first_last_name
    self.assertEqual(full_name, 'Lin Xiao')
AssertionError: 'Lin Xidao' != 'Lin Xiao'
- Lin Xidao
?       -
+ Lin Xiao


----------------------------------------------------------------------
Ran 1 test in 0.025s

FAILED (failures=1)


------------------
(program exited with code: 1)

请按任意键继续. . .

案例分析:
①通过案例分析查看,我们很容易可以看出通过断言方法测试代码是挺有效的,尤其在代码大的项目中使用,而在小项目中可以具情况而决定是否使用
②当测试代码不通过时,我们可以发现它将会很详细的显示出错误原因是什么,并向你指出。

更多的常用断言方法

MethodChecks that
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(x)bool(x) is True
assertFalse(x)bool(x) is False
assertIn(a , b )a in b
assertNotIn(a , b )a not in b

更多详细方法点这里


你的每次点赞和关注,我都认真的当作是喜欢~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值