python中的单元测试

python中的单元测试可以使用doctest,unittest完成

1.doctest的使用

(1)写入程序如下(cubetest.py):

#!/usr/bin/python
def cube(x):
	"""
	cube a number and return the result

	>>> cube(2)
	8
	>>> cube(3)
	27
	>>> cube(4)
	64
	"""
	return x**3;
if __name__==‘__main__‘:
	import doctest;
	doctest.testmod(verbose=True);

测试用例写在字符串””” cube a number… “””中。

调用doctest中的testmod的方法即可测试。

输出如下:

Trying:

cube(2)

Expecting:

8

ok

Trying:

cube(3)

Expecting:

27

ok

Trying:

cube(4)

Expecting:

64

ok

1 itemshad no tests:

__main__

1 itemspassed all tests:

3 tests in __main__.cube

3 testsin 2 items.

3 passedand 0 failed.

Testpassed.

TestResults(failed=0, attempted=3)

(2)也可以把测试用例写在记事本文件中。新建记事本example.txt,写入以下内容:

>>> from cubetest import cube

>>> cube(1)

1

>>> cube(2)

8

>>> cube(4)

64

然后写测试代码 test.py:

import doctest
doctest.testfile("example.txt")

使用python test.py  –v 执行测试代码,可以得到以下结果

Trying:

from cubetest import cube

Expectingnothing

ok

Trying:

cube(1)

Expecting:

1

ok

Trying:

cube(2)

Expecting:

8

ok

Trying:

cube(4)

Expecting:

64

ok

1 items passedall tests:

4 tests in example.txt

4 tests in 1items.

4 passed and 0failed.

Test passed.

2.unittest的使用

(1)写待测试的程序如下:

def iseven(x):
	if(x%2==0):
		return 1;
	else:
		return 0;
def isodd(x):
	if(x%2==1):
		return 1;
	else:
		return 0;

测试程序中的类eventest类继承自TestCase,它包含setUp() ,test_1(),test_2()和tearDown()四个方法。在测试运行前,会自动运行setUp()方法,在测试完成之前,会自动调用tearDown()方法。test_1()和test_2()是自定义的测试方法。写测试程序如下:

import unittest,evenodd
class eventest(unittest.TestCase):
	def setUp(self):
		self.ex1=range(0,2,20);
		self.ex2=range(1,2,20);
	def test_1(self):

		for x in self.ex1:
			x=evenodd.iseven(x);
			self.assertEqual(x,1);
		for x in self.ex2:
			x=evenodd.iseven(x);
			self.assertEqual(x,0);
	def test_2(self):

		for x in self.ex1:
			x=evenodd.isodd(x);
			self.assertEqual(x,0);
		for x in self.ex2:
			x=evenodd.isodd(x);
			self.assertEqual(x,1);
	def tearDown(self):
		self.ex1=None;
		self.ex2=None;
if __name__==‘__main__‘:
	unittest.main();

上面用到了self.AssertEqual(),类似的判断方法还有:

assertNotEqual(a,b)   a!=b

asserTrue(x)     bool(x)为真

assertFalse(x)     bool(x)为假

assertIs(a,b)     a is b

assertIsNot(a,b)   a is not b

assertIsNone(x)    x is None

assertIsNotNone(x)   x is not None

assertIn (a,b)   a in b

assertNotIn(a,b)  a not in b

assertIsInstance(a,b)   isinstance(a,b)

assertNotIsInstance(a,b)   not instance(a,b)

(2) 也可以使用TestSuite对测试用例进行封装,下面的程序定义了类evensuite,它继承自类TestSuite,方法addTest()用于添加测试方法。

测试程序如下:

import unittest,evenodd
class eventest(unittest.TestCase):
	def setUp(self):
		self.ex1=range(0,2,20);
		self.ex2=range(1,2,20);
	def test_1(self):
		for x in self.ex1:
			x=evenodd.iseven(x);
			self.assertEqual(x,1);
		for x in self.ex2:
			x=evenodd.iseven(x);
			self.assertEqual(x,0);
	def test_2(self):
		for x in self.ex1:
			x=evenodd.isodd(x);
			self.assertEqual(x,0);
		for x in self.ex2:
			x=evenodd.isodd(x);
			self.assertEqual(x,1);
	def tearDown(self):
		self.ex1=None;
		self.ex2=None;
class evensuite(unittest.TestSuite):
	def suite(self):
		suite=unittest.TestSuite();
		suite.addTest(eventest(‘test_1‘));
		suite.addTest(eventest(‘test_2‘));
		return suite;

if __name__==‘__main__‘:
	unittest.main();

运行程序 ,结果输出:

_ _

ran 2 tests in 0.001s

OK

python中的单元测试

时间: 2024-07-30 13:49:36

python中的单元测试的相关文章

Python 中 unittest 单元测试框架中需要知识点

现在正在使用 unittest 框架,我们来记录下这个框架的知识点: unittest 框架:我们在写接口用例的时候,会继承 unittest 当中的 TestCase 的类和方法,私有方法除外,来识别以 test_ 开头的测试用例,unittest 相当于是一个包,我们来使用包里面的工具: 1. 单元测试的概念 测试不是来测试Java写的模块.函数.类 而是测试代码输入和输出,比对是否正确 往往单元测试, 是有开发来写, 用于测试自己写的模块.函数.类是否正确 有的一些单元测试任务, 是由测试

python中的单元测试和数据库测试

登录测试被测试的代码逻辑 @app.route('/login', methods=['POST']) def login(): username = request.form.get('username') password = request.form.get('password') # 判断参数是否为空 if not all([username, password]): result = { "errcode": -2, "errmsg": "par

python中的单元测试模块unittest

unittest的属性: 该文以思维导图的形式描述unittest的重要属性. 其中前四个是unittest最核心的三个属性. testcase:测试用例: testsuite:测试套件,多个测试用例组成一个测试套件: test runner:执行测试用例,该类中的run()方法会执行testsuite/testcase中的run()方法.测试的结果会保存在testresult中. 还有一个很重要的就是fixture,看着是挺陌生的,其实就是一个测试用例执行之前环境的准备和执行之后环境的销毁.

python中unittest单元测试框架-加载测试用例、运行测试用例、生成测试报告

unittest中加载测试用例的方法很多,这里先介绍addTest中添加用例-测试类的实例的方式: import os import unittest # 创建suite对象 suite = unittest.TestSuite() # 第一种方法:一个一个添加用例 from class1228_unittest_loader.test_cases.test_setup import * # 添加测试用例到suite套件里面:用例-测试类的实例 suite.addTest(TestSetUp('

Python项目中的单元测试

引入 单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架. 单元测试与功能测试都是日常开发中必不可少的部分,本文演示了Python中unittest单元测试框架的基本使用. 一个简单的测试例子 定义一个类,简单的实现add.sub两个方法,并对其进行单元测试. 待测试的m1.py文件内容如下: class MyClass(object): """just a test case""" def __i

Python 中的 unit test 流程

看了看Python中的单元测试流程, 写了个测试代码来看整体的测试流程 总结如下 一个 test case 类应该派生自 unittest.TestCase 正常的的test case的调用顺序为 子类TestCase可以注册自己的清理函数(my_cleanup). 这个清理函数会在teardown之后被调用 def setUp(self): super(MyTestCase, self).setUp() self.addCleanup(self.my_cleanup) 单元测试函数名必须以"t

Django中的单元测试以及Python单元测试

Python单元测试 是用来对一个模块.一个函数或者一个类进行正确性检验的测试工作. 在Python中unittest是它内置的单元测试框架,单元测试与功能测试都是日常开发中必不可少的部分. 比如对函数abs(),我们可以编写出一下几个测试用例: 输入正数,比如1,1.2,0.99,我们期待返回值与输入相同 输入负数,比如-1,-1.2,-0.99,我们期待返回值与输入值相反 输入0,我们期待返回0 输入非数值类型,比如None,[],{},我们期待抛出TypeError 把上面的测试用例放到一

Python学习-41.Python中的断言

先来点题外话: 在现代编程开发中,TDD(测试驱动开发)变得越来越流行(PS:DDD(领域驱动开发)也是,但两者并不冲突,就像面向过程和面向对象).而作为TDD的根本——单元测试也是越来越重要,单元测试可以测试代码的正确性,例如以下的C#代码: 1 public class Helper 2 { 3 public string RemoveHtmlMarkup(string str) 4 { 5 return str; 6 } 7 } 需求是去除字符串中的html标记.当然现在这样是错误的,只会

Python之自动单元测试之一(unittest使用实例)

1 测试用例TestCase 软件测试中最基本的组成单元是测试用例(test case),PyUnit使用TestCase类来表示测试用例,并要求所有用于执行测试的类都必须从该类继承.TestCase子类实现的测试代码应该是自包含(self contained)的,也就是说测试用例既可以单独运行,也可以和其它测试用例构成集合共同运行. TestCase在PyUnit测试框架中被视为测试单元的运行实体,Python程序员可以通过它派生自定义的测试过程与方法(测试单元),利用Command和Comp