参考:

https://blog.csdn.net/ljl6158999/article/details/80994979

1.概念提出

unittest最初灵感来自于Junit,它有着和其他单元测试语言类似的风格。unittest支持测试自动化,共享测试的setup和shutdown代码,将测试聚合到集合中,并且独立于报告框架。

1.unittest 有着全局方法:setup和shutdown

2.多个 testcase 组成 testsuite 

3.unittest 测试和报告是独立的

接下来,让我们从面向对象的角度来了解unittest的一些重要概念,

1.test fixture

test fixture 表示要准备跑一个或者多个测试用例了,或者做结束后相关的清理工作。

比如:创建临时/代理数据库,目录或者启动一个服务进程

2.test case

测试中的最小单元,它会对输入的内容进行bug检查。我们通过继承TestCase基类来生成 test case

3.test suite

多个 testcase 组成 testsuite,test suite用于把测试用例聚合在一起并执行它们。

4.test runner

test runner是一个组件,第一个作用是组织测试用例,第二是给用户提供测试结果。

测试结果可能是一个物理接口、一个文本接口,或者返回一个特殊值。。

2.Base example

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper()) def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2) if __name__ == '__main__':
unittest.main()

1. 要创建一个testcase,就写一个类来继承unittest.TestCase。例子中定义了三个方法test_upper()、test_isupper()、test_split(),它们都是最小测试单元,这些测试单元在一起组成了测试用例。要注意它们的名字都要求是以 test 开头

2. assertEqual() :我们用这个方法来检查期望的结果,通过实际值和期望值进行对比。

    assertTrue() 、assetFalse():检查一个条件表达式,通过表达式的True或False来判断。

    assertRaises():验证是否引发了一个指定的异常。引发了异常则通过,否则失败,如例子所示 s.split(2)引发了一个类型错误,我们要的就是验证出现了这个错误,所以case通过!

3. setUp()、tearDown():允许你在每个测试方法(最小测试单元)之前或之后做点事情。一般是初始化和收尾的清理工作。

4. unittest.main():提供命令行接口去执行测试用例。在命令行运行该py文件后,会返回测试结果报告。

3.命令行

...

...

4.Test Discovery

为了兼容 test discovery,所有的测试文件必须是从项目顶级目录中导入的模块或包。

test discovery继承自TestLoader.discover(),也可以在命令行中使用哦。基本使用方法:

cd project_directory
python -m unittest discover

Q: 那么这个Test Discovery是干什么的呢?

从开始目录递归搜索测试模块,返回值是包含这些测试测试模块的TestSuite对象。

Q:什么叫做从项目顶级目录中导入的模块或包?

不知道。。。

5.Organizing test code

Continue...

最新文章

  1. CSS的未来
  2. MongoDB aggregate 运用篇
  3. 分享一个UI与业务逻辑分层的框架(二)
  4. JJ Ying:越来越跨界的界面设计
  5. mybatis 如何查找表里的某一个字段,然后返回它们的结果集list ?
  6. WP8.1 添加启动画面
  7. Uploadify 3.2 参数属性、事件、方法函数详解
  8. 1319-n皇后问题
  9. java学习笔记(3):java的工作原理及相关基础
  10. Git操作流水账
  11. css 相关
  12. JMeter 连接数据库报错No suitable driver found for jdbc:xxxxxxxxx
  13. KiCad 一款强大的 BOM 和 装配图生成插件
  14. laravel 5.4 fopen(): Filename cannot be empty
  15. zookeeper视图工具
  16. [视频播放] M3U8文件格式说明
  17. CSS图标文字不对齐
  18. 自动化部署-Jenkins+SVN+MSBuild
  19. Linux排查Java程序占用CPU很高的解决办法
  20. dns欺骗之ettercap

热门文章

  1. 1、Redis简介
  2. Linux core 文件浅析
  3. 第46篇-signature_handler与result_handler
  4. SQL获取当天0点0分0秒和23点59分59秒方法
  5. sar命令查看网卡流量 (System ActivityReporter系统活动情况报告)
  6. 网站高可用架构之BASE原理
  7. maven打包 运行出现 错误: 找不到或无法加载主类 jar
  8. JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载
  9. java源码——计算立体图形的表面积和体积
  10. 【LeetCode】35. Search Insert Position 解题报告(Java & Python)