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數目