Pythonでのunittestによる簡単なユニットテストインスタンスの詳細

3608 ワード

前言
ユニットテストの重要性は多くありませんが、Pythonにはユニットテストのフレームワークとツールが多すぎます.unittest、testtools、subunit、coverage、testrepository、nose、mox、mock、fixtures、discover、setuptools、distutilsなど、ユニットテストをどのように書くかはもちろん、ユニットテストをどのように実行するかだけでNの方法があります.また機能ではなくテストなので、多くの人が触れることに興味がないものです.しかし、優秀なプログラマーとして、機能コードだけでなく、テストコードを書くように実力を発揮しなければなりません.このように多くのフレームワークとツールは、人を困惑させやすく、困惑の原因はその基本原理を理解していないためで、もしいくつかの基本的な概念がはっきりしていないならば、どのように構想のはっきりしたテストコードを書くことができますか?
今日のトピックはunittestです.標準pythonのモジュールとして、他のフレームワークとツールの基礎です.参考資料は公式ドキュメントです.http://docs.python.org/2.7/library/unittest.htmlソースコードと、ドキュメントは非常によく書かれています.本稿では、簡単な例を示します.見てみればわかります.
例は次のとおりです.
まず、テストするPythonモジュールを示します.コードは以下の通りです.
テスト対象プログラム:date_service.pyPython

# coding:utf8
'''
     
 
@author: www.crazyant.net
'''
 
def get_date_year_month(pm_date):
 """    pm_date        
 """
 if not pm_date:
  raise Exception("get_curr_year_month: pm_date can not be None")
 
 # get date's yyyymmddHHMMSS pattern
 str_date = str(pm_date).replace("-", "").replace(" ", "").replace(":", "")
 
 year = str_date[:4]
 month = str_date[4:6]
 return year, month

次に、テストスクリプトを作成できます.コードは次のとおりです.
テスター:test_date_service.pyPython

# coding: utf8
 
"""
  date_service.py
 
@author: peishuaishuai
"""
 
import unittest
 
from service import date_service
 
class DateServiceTest(unittest.TestCase):
 """
 test clean_tb_async_src_acct.py
 """
 
 def setup(self):
  """           """
  pass
 
 def tearDown(self):
  """          """
  pass
 
 def test_get_date_year_month_1(self):
  """     1,       test_   """
  
  pm_date = "2015-11-25 14:40:52"
  year, month = date_service.get_date_year_month(pm_date)
  self.assertEqual(year, "2015", "year not equal")
  self.assertEqual(month, "11", "month not equal")
 
 def test_get_date_year_month_2(self):
  """     1,       test_   """
  pm_date = "20161225144052"
  year, month = date_service.get_date_year_month(pm_date)
  self.assertEqual(year, "2016", "year not equal")
  self.assertEqual(month, "12", "month not equal")
 
 
# test main
if __name__ == "__main__":
 unittest.main()

このtest_を実行しますdate_service.pyでは、次の情報が印刷されます.
テスト結果の実行

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
 
OK

ここの各ポイントは、テストが成功したことを表し、最後にすべてのテストが成功した回数とテストの時間を示します.
これまで多くの时間、私はずっと単測を書くのに何の役に立つか分かりませんでした.単測はただ書いたプログラムを実行しただけで、新しい論理を作成していません.私は心の中で「私はすでにプログラムを私の考えに従って書いたので、それは私の設計に従って実行します.どうして単測でもう一度歩きますか」と疑問に思っていました.その後、コードにバグが発生し、長い間デバッグしていたが、問題が発生していることに気づいた.equals(objb)」は、objaとobjbは1つがLongで1つがIntegerなので、数値が同じでも等しくありません.
その时から、私は単测のしたことを発见して、実は“プログラムが私の考えによって运行しているかどうかを検証します”で、これこそその究极の目的で、しかし、これはとても肝心な事で、设计は往々にして间违いなくて、しかし书いたコードはいつも私达の考えによって运行したのではありません.
単一測定とは,コードが我々の想像通りに動作しているかどうかを検証することであり,これも単一測定という技術の意義である.
まとめ
以上はこの文章のすべての内容で、本文の内容がみんなの学习あるいは仕事に対して一定の助けをもたらすことができることを望んで、もし疑问があればみんなは伝言を残して交流することができます.