python-unittest

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章