分类: Python/Ruby
2011-04-22 15:01:42
先学习下如何调试Python程序,然后再学习下如何做单元测试。Python的pdb模块同GDB非常相似,不过它只是GDB一个小小的子集,似乎不支持调试多线程程序。在网上找到一篇不错的文章:用PDB库调试Python程序。写了个小例子,练习下使用pdb调试和做单元测试吧。
下面是一个简单的数学库,实现了简单的加减函数。代码如下:
1 |
2 |
3 |
4 |
5 |
主程序会调用数学库中的函数,代码如下:
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
下面演示了几条最基本的调试命令的使用方法,包括”list”,”continue”,”break”,”run”,”backtrace”等等。打断点的时候不要打在函数的def处。如果这样做,import的时候会运行到这个位置,真正调用函数时却不会停住。impor的时候会生成Python内部的运行指令,因此会运行到每个函数定义的地方。
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Python的单元测试框架同JUnit差不多,因为它们的开发者都是Kent Beck,接口都是一样的。使用setUp和tearDown做准备和收尾工作。每个要测试的接口都以”test”开始。在math_utils.py添加下面这段代码便可。
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
直接运行程序,得到以下输出:
1 |
2 |
3 |
4 |
5 |
6 |
上面这种方式将测试代码同源代码混杂在一起,并不是一种很好的方式。可以将测试用例的代码放到一个单独的unittest目录中。对每个用例设计一个test case,然后使用下面这种方式添加测试用例。
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
如果安装python-tk包,就可以使用图形界面来跑测试用例了。PyUnit源码包中有一个unittestgui.py文件,将该文件拷贝到测试用例代码目录下。输入如下命令,注意math_utils不要加”.py”后缀,否则会出错。
1 |
测试界面如下: