测试代码

   编写函数或类时,还可以为其编写测试。通过测试,可确定代码面对各种输入都能够按照要求那样工作。

单元测试和测试用例:

  单元测试用于核实蛮熟的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。

良好的测试用例考虑到了函数可能收到的各种输入,包含针对这些所有情形的测试。

全覆盖测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现覆盖可能很难。所以通常,最初只要针对

代码的重要行为编写测试即可,等项目被广泛使用率再考虑全覆盖。

范例代码:

#!/usr/bin/env python

#filename = name_function.py

def get_formated_name(first,last):

    full_name = first + ‘ ‘ + last

    return full_name

定义了一个函数模块,叫做get_formated_name

编写一个测试代码,对这个函数进行测试!

#!/usr/bin/env python

import unittest

from name_function import get_formated_name

class Test_names(unittest.TestCase):    ①

    def test_first_last_name(self):

        formated_name = get_formated_name(‘xue‘,‘lingming‘)   ②

        self.assertEqual(formated_name , ‘xue lingming‘)    ③

unittest.main()

首先,导入模块unittest(这是个class),和需要测试的函数get_formatted_name

在1处,创建一个类,这个类的名字叫做Test_names(可以随意定义),在这个类中必须继承unittest的一个子类

unittest.TestCase,这个类中只包含一个方法,用于测试get_formatted_name是否可以正确格式化名字。

在unittest模块的测试代码下,所有test_开始的方法都是自动运行的。

在3处,我们使用了unittest类最有用的功能之一:断言

用来核实得到的结果是否与期望的结果一直。

代码self.assertEqual(formated_name , ‘xue lingming‘) 的意思是说:“将formated_name的值与‘xue lingming‘进行比较

如果相等就万事大吉,如果不同就报告’’”

运行这个测试脚本的结果:

"test_name_function.py" 11L, 291C written
[[email protected] Alben-PY]# ./test_name_function.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

修改上面的函数,让其可以处理中间名:

#!/usr/bin/env python

#filename = name_function.py

def get_formated_name(first,middle,last):

    full_name = first + ‘ ‘ + middle + ‘ ‘ + last

    return full_name

 再次测试:

报错了!!!

[[email protected] Alben-PY]# ./test_name_function.py
E  """"""""这个E代表Error""""""""
======================================================================
ERROR: test_first_last_name (__main__.Test_names)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./test_name_function.py", line 8, in test_first_last_name
formated_name = get_formated_name(‘xue‘,‘lingming‘)
TypeError: get_formated_name() missing 1 required positional argument: ‘last‘  这一行提示我们少一个实参‘last‘

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

解读——

因为在函数name_function中,我们定义了三个形参“first,middle,last”而测试代码中,只传递了2个位置实参,导致形参‘last’没有获取到实参,进而报错了。

处理方法:把形参middle定义为可选形参,并且微调主体脚本

#!/usr/bin/env python

#filename = name_function.py

def get_formated_name(first,last,middle=‘‘):

    if middle:

        full_name = first + ‘ ‘ + middle + ‘ ‘ + last

    else:

        full_name = first + ‘ ‘ + last

    return full_name

只需注意一下,带有默认值的可选形参必须放在最后一个。

测试效果:

[[email protected] Alben-PY]# ./test_name_function.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

时间: 2024-10-14 13:10:15

测试代码的相关文章

第4次作业类测试代码+105032014166+张珍珍

第4次作业:准备类测试代码 类测试代码的具体要求如下: (1)设计三角形完整程序 已经完成的方法是:  String triangle(int a,int b,int c) 现在要求继续增加新的功能: 建立界面,至少包含以下元素,但不限于此: 完成面积的方法:float triangleArea(int a,int b,int c) ,完成周长的方法:int perimeter(int a,int b,int c) 要求: 1.        画出类图: 2.        完成界面和相应的功能

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

MyPython-->进阶篇-->测试代码

测试函数 要学习测试,得要有测试的代码.下面是一个简单的函数,接受名和姓并返回整洁的姓名 name_function.py def get_allname(x,m): allname = ('%s %s'%(x,m)).title() return allname 编写测试代码 from name_function import get_allname print(get_allname('cc','leo')) import unittest class NameTestCase(unitte

x264测试代码

建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h"  //如果没有,下载地址为:http://download.csdn.net/detail/evsqiezi/7014021extern "C"{#include "x264.h"#include "x264_config.h"};usi

Maven配置插件跳过测试代码的编译和运行

Maven配置插件跳过测试代码的编译和运行: <!-- 编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</targe

linux下libphenom的测试代码

使用说明:测试使用libphenom库的字符串追加函数,效率是strcat的60多倍.所以在进行大量的字符串累加的时候可以考虑使用libphenom库  依赖库: ck-0.4.5.tar.gz cmake-3.1.2.tar.gz libtap-1.12.0.tar.bz2 libphenom.tar.gz 头文件: #include <phenom/sysutil.h> #include <phenom/string.h> #include <phenom/stream.

国嵌内核驱动进阶班-7-1(Ioctl设备控制)--- 测试代码

驱动内容: 1 #include <linux/module.h> 2 #include <linux/types.h> 3 #include <linux/fs.h> 4 #include <linux/errno.h> 5 #include <linux/mm.h> 6 #include <linux/sched.h> 7 #include <linux/init.h> 8 #include <linux/cde

测试代码高亮

测试方法 测试代码 测试方法 测试代码 源代码,按Markdown语法进行默认的代码高亮的效果: let g:octopress_path = "path/to/dir" 使用octopress的代码高亮进行显示的效果: 测试语法高亮 1 let g:octopress_path = "path/to/dir" 网上的一个例子 Discover if a number is primeSource Article 1 2 3 4 5 class Fixnum def

Berkeley DB TPS测试代码

最近搞一个高并发的服务中心,需要把数据写入到MySql中,结果测试发现最大TPS才4K,经过讨论后决定先把接收到的数据写到本地,然后通过同步线程再同步到MySql. 最初本地存储选用的SqlLite,结果测试发现SqlLite支持并发有问题:又选型BerkeleyDB,经过测试发现BerkeleyDB满足需求. BerkeleyDB测试代码如下: 注:代码还有改造的地方,如initCheck方法去掉同步,改为初始化为同步,请在项目中自行修改 package test.berkelyDb; imp