1. unittest module包含了编写运行unittest的功能,自定义的test class都要集成unitest.TestCase类,test method要以test开头,运行顺序根据test method的名字排序,特殊方法:
① setup():每个测试函数运行前运行
② teardown():每个测试函数运行完后执行
③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次
④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次
2. 示例代码:
#文件名runtest.py
import
random
import
unittest
class
TestSequenceFunctions(unittest.TestCase):
def
setUp(
self
):
self
.seq
=
list
(
range
(
10
))
def
test_shuffle(
self
):
# make sure the shuffled sequence does not lose any elements
random.shuffle(
self
.seq)
self
.seq.sort()
self
.assertEqual(
self
.seq,
list
(
range
(
10
)))
# should raise an exception for an immutable sequence
self
.assertRaises(TypeError, random.shuffle, (
1
,
2
,
3
))
def
test_choice(
self
):
element
=
random.choice(
self
.seq)
self
.assertTrue(element
in
self
.seq)
def
test_sample(
self
):
with
self
.assertRaises(ValueError):
random.sample(
self
.seq,
20
)
for
element
in
random.sample(
self
.seq,
5
):
self
.assertTrue(element
in
self
.seq)
if
__name__
=
=
'__main__'
:
unittest.main()
3.运行方式:在命令行直接运行这个runtest.py
可以使用unitest.skip装饰器族跳过test method或者test class,这些装饰器包括:
① @unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试
② @unittest.skipif(conditition,reason):condititon为true时跳过测试
③ @unittest.skipunless(condition,reason):condition不是true时跳过测试
可以自定义skip decorator
#这是一个自定义的skip decorrator
def
skipUnlessHasattr(obj, attr):
if
hasattr
(obj, attr):
return
lambda
func: func
return
unittest.skip(
"{!r} doesn't have {!r}"
.
format
(obj, attr))
skip decorator示例代码:
class
MyTestCase(unittest.TestCase):
@unittest
.skip(
"demonstrating skipping"
)
def
test_nothing(
self
):
self
.fail(
"shouldn't happen"
)
@unittest
.skipIf(mylib.__version__ < (
1
,
3
),
"not supported in this library version"
)
def
test_format(
self
):
# Tests that work for only a certain version of the library.
pass
@unittest
.skipUnless(sys.platform.startswith(
"win"
),
"requires Windows"
)
def
test_windows_support(
self
):
# windows specific testing code
pass
@unittest
.skip(
"showing class skipping"
)
class
MySkippedTestCase(unittest.TestCase):
def
test_not_run(
self
):
pass
4.expected failure:使用@unittest.expectedFailure装饰器,如果test失败了,这个test不计入失败的case数目