首页 > 编程 > Python > 正文

Python 单元测试(unittest)的使用小结

2020-02-15 23:41:21
字体:
来源:转载
供稿:网友

测试目录

项目的整体结构可以参考“软件目录开发规范”,这里单说测试目录。一般都是在项目里单独创建一个测试目录,目录名就是“tests”。

关于目录的位置,一种建议是,在项目名(假设项目名是Foo)的一级子目录下创建二级子目录 “Foo/foo/tests” 。但是这样可能是因为用起来不方便,有很多是按下面的做法。不过下面的示例我还是用这个方法来创建测试目录。
还可以把测试目录向上移一层,作为一级子目录,直接创建在项目之下 “Foo/tests”。参考django、scrapy、flask都是这样的做法。

测试函数

标题的意思是对函数(def)进行测试,相对于测试类(class)。

学习测试,得有要测试的代码。下面是一个简单的函数,接收城市名和国家名,返回一个格式为“City, Country“这样的字符串:

# UnitTest/unit_test/utils/city_functions.pydef get_city_info(city, country):  city_info = "%s, %s" % (city, country)  return city_info.title()

接下来就对上面的这个函数进行测试。

手动测试

现在来写一个使用这个函数的程序:

# UnitTest/unit_test/test/cities.pytry:  from unit_test.utils.city_functions import get_city_infoexcept ModuleNotFoundError:  import sys  sys.path.append('../..')  from unit_test.utils.city_functions import get_city_infoprint("Enter 'q' at any time to quit.")while True:  city = input("city name: ")  if city == 'q':    break  country = input("country name: ")  if country == 'q':    break  fullname = get_city_info(city, country)  print("/tcity info:", fullname)

然后运行的结果:

Enter 'q' at any time to quit.
city name: shanghai
country name: china
    city info: Shanghai, China
city name: q

Process finished with exit code 0

上面这样是手动测试,还是得有一种自动测试函数输出的高效方式。如果能够对get_fullname()进行自动测试,就能始终确信,给这个函数提供测试过的姓名后,它能返回正确的结果。尤其是在对函数进行修改的前后。

模块导入路径的问题

PyCharm会自动把项目目录加到环境变量里去,在PyCharm里执行都没问题。但是如果不用PyCharm而是单独运行,这个目录结构应该会有点问题,会找不到需要测试的函数。简单点就是把测试用例和被测试的函数放到同一个目录里,然后改一下 from import 就可以正常运行了。或者自己手动添加环境变量,就像例子里那样。

单元测试-unittest

Python标准库中的模块unittest提供了代码测试工具。

创建测试用例

为函数编写测试用例,可先导入模块unittest以及要测试的函数,再创建一个继承unittest.TestCase的类,并编写一系列方法对函数行为的不同方面进行测试。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表