話Pythonのユニットテストフレームワーク(B):鼻とその後継nose2


著者:HelloGitHub- Prodesire

「オープンソース・プロジェクトの説明」シリーズのHelloGitHub、プロジェクトのアドレスします。https://github.com/HelloGitHub-Team/Article

、鼻

鼻は、サードパーティのユニットテストフレームワークであり、それは完全に互換性がありunittest、かつテストフレームワークの活用として知られています。

その後、noseほかunittestのすべての機能が、また、どのような利点を持っていますか?

1.1書き込みユースケース

継承されたの製造にことを除いて準備方法の例たunittest.TestCaseテストクラスが、のように書くこともできるテストクラスを継承していません例えば、フォームに書き込まがするnoseテストクラスとして扱います。

from nose.tools import raises

class TestStringMethods:

    def test_upper(self):
        assert 'foo'.upper() == 'FOO'

    def test_isupper(self):
        assert 'FOO'.isupper()
        assert not 'Foo'.isupper()

    @raises(TypeError)
    def test_split(self):
        s = 'hello world'
        assert s.split() == ['hello', 'world']
        # check that s.split fails when the separator is not a string
        s.split(2)

もちろん、クラスがテストを継承していないunittest.TestCase、あなたは内蔵のすべてのタイプを使用することができなくなりassertXXX、エラーがコンテキストのユースケースを発生し、より詳細な情報を入手することができませんでし主導の方法を、。

また、noseまた、サポート関数の定義を多くの単純なテストシナリオは大きな利便性をもたらす与える、テストとして:

def test_upper():
    assert 'foo'.upper() == 'FOO'

そして、実施例1.2で検出を実行

unittest発見は、ユースケースと実施能力をサポートし、noseサポートされています。
nose例で見つかったの自動サポート(再帰的に):

  • デフォルトでは、すべて含まれている現在のディレクトリにあるtestテストケースを、しかし含まれていない_ユースケースの始まりを
    • 使用するnosetestsコマンドを
  • -wディレクトリパラメータは、自動検出を指定する-mパラメータは、クラス名のパターン(正規の試合)を使用して、ファイルケース、ディレクトリ機能を指定します
    • nosetests -w project_directory "test_.+"

nose また、指定されたユースケースの実装をサポートしています。

  • テストモジュールを指定します。
    • nosetests test.module
  • テストクラスを指定します。
    • nosetests a.test:TestCase
  • 試験方法を指定します
    • nosetests another.test:TestCase.test_method
  • テストファイルのパスを指定します。
    • nosetests /path/to/test/file.py
  • 試験クラスファイルパス+(されたテストまたはテスト機能を指定unittestサポートされていません)
    • nosetests /path/to/test/file.py:TestCase
    • nosetests /path/to/test/file.py:TestCase.test_method
    • nosetests /path/to/test/file.py:test_function

1.3テスト・フィクスチャ(備品)

noseサポートに加えてunittestサポート事前定義されたテストとクリーンな方法を、また、方法のシンプルな定義をサポートしています。

def setup_func():
    "set up test fixtures"

def teardown_func():
    "tear down test fixtures"

@with_setup(setup_func, teardown_func)
def test():
    "test ..."

単に前面とによる2つの洗浄方法表すために使用される関数定義nose.tools.with_setupデコレータ装飾テスト機能を、nose前に各テストの後に行われる事前定義された機能およびクリーンアップを行います。

1.4サブテスト/テストジェネレータ

noseサポートに加えて、またつまり、サブライトテストのより強力な方法をサポートして、実装。unittestTestCase.subTest测试生成器(Test generators)yield

次の例では、我々は定義test_evens5つのサブテストを作成するテスト機能を、check_even

def test_evens():
    for i in range(0, 5):
        yield check_even, i, i*3

def check_even(n, nn):
    assert n % 2 == 0 or nn % 2 == 0

また、と比較してunittest.TestCase.subTest複数のサブテストのみ試験前回実行し、クリーンアップすることができ、サポートする各サブテストのような、事前テストを実行し、クリーンアップ:nose测试生成器

def test_generator():
    # ...
    yield func, arg, arg # ...

@with_setup(setup_func, teardown_func)
def func(arg):
    assert something_about(arg)

1.5プラグインシステム

nose比べてunittest最大の利点の一つの有用なプラグインの多くが付属して、プラグインシステムであり、サードパーティのプラグインが豊富にあります。だから、より多くのことを行うことができます。

これは次のようにしているプラ​​グインが付属しています:

  • AllModules:すべてのモジュールによって収集例
  • ATTRIB:使用するために実施例をタグ付けし、指定されたタグを含む実施形態で実行
  • キャプチャ:の標準出力例をキャプチャ
  • 収集:ユースケースはすぐに集まります
  • 表紙:統計コードカバレッジ
  • デバッグ:デバッグの患者がでPDBを入力しません
  • 非推奨ので標識した非推奨例:
  • doctest:実行中のドキュメントユースケース
  • 詳細失敗:アサーションは、コンテキスト情報を提供するために失敗しました
  • アイソレート:保護ケースは、副作用のいくつかの影響を避けるために
  • Logcapture:キャプチャログ出力
  • マルチプロセス:パラレル実行の例
  • 教授:分析のためのホットアナライザ使用
  • スキップ:で標識した例をスキップ
  • テストID:出力の各ユースケース名のテストIDを追加
  • xUnitフレーム:出力形式のテスト結果のxUnit

サードパーティ製のライブラリは、HTML形式の中にテストレポートを生成するなど、多様である鼻htmloutputなど、もはやここに記載されているではありません。

おかげでnose、プラグインエコロジーの富、nose時間自体は完全に我々のテストのニーズを満たすことができない、あなたはプラグインをインストールして、できるnosetestsプラグインの特定のパラメータを指定して、コマンドラインでプラグインを使用することは非常に簡単にすることができます提供します。
比較するとunittest、我々は、追加のテストロジックを開発するために彼らの多くの労力を節約することができます。

二、nose2

nose2がある鼻の後継。
彼らのアイデアは、簡単にテストケースを書いて実行するようにすることです。

彼らは、このような互換性など、多くの類似点を持っているunittest、プラグインシステムと、子テストをサポートするテストケースとしての機能をサポートしています。しかし、多くの異なる点があり、いくつかの重要な相違点は次のとおりです。

  • 検索と負荷テスト
    • nose 自己充足、不活性な方法の試験モジュールとロード、機能モジュールのロードを実行ロード。
    • nose2組み込みによるインポート()の実行例次に、モジュールに導入し、まずロードされたのです
    • nose2サポートされていないnoseような実施形態のように、ファイル構造など、すべてのサポートされた構造の試験項目、nose2その中にはサポートされていません。
.
`-- tests
    |-- more_tests
    |   `-- test.py
    `-- test.py
  • 事前試験およびクリーンアップ機能レベル
    • nose 支持メソッド、クラス、モジュール、及びパッケージレベル試験およびプレクリーンアップ関数
    • nose2 プリパッケージレベルのテストおよびクリーンアップ機能がサポートされていません。
  • サブテスト
    • nose2サブテストを達成するために使用される検査生成装置をサポートすることに加えて、ほかの使用サポートパラメトリック検定(パラメータ化テスト)サブテストを実現します
    • nose2また、同様にnoseテストクラス(継承されないで、同じ機能とテスト支援unittest.TestCase)とパラメトリックテストとテストジェネレータをサポートするだけでなく、連続をサポートするために、unittest.TestCaseテストクラスを使用して
  • の設定
    • nose 全てのプラグインコマンドライン引数を介して構成された所望の構成
    • nose2 人々がより快適に読む最小限に抑えるために、設定ファイル、コマンドラインパラメータによって制御され、

のより詳細な比較公式文書

IIIの概要

noseそして、nose2中に収容されるようにunittest彼らのターゲットを参照するのに十分で、それは本来の使用して、それらの誘致することでunittest、それらを使用するようにユーザーを。彼らは実際にそれをやりました!

noseそしてnose2、ユースケース、テストフィクスチャの準備の改善を行い、子供が毎日使用する場合の準備が簡単に、より柔軟にするために持ってテストします。プラグインシステムを導入しながら、さらにユニットテストフレームワークの実装を行い、可能なテスト機能に基づいて、高次機能の多くを共有して大きなステップ、の能力を強化します。不思議多くの開発者は、彼らのためにソフトスポットを持っていません。


「オープンソース・プロジェクトのシリーズの説明」 -オープンソース・プロジェクトは、もはや恐れているの人々が興味を持ってできるように、スポンサーのオープンソース・プロジェクトだけではもはやありませんしましょう。私たちの記事に従ってください、あなたはプログラミングの楽しさ、オープンソースプロジェクトの使用を発見し、そう単純で関与することが判明します。ウェルカムメッセージは〜より多くの人々は、オープンソース、オープンソースの貢献と恋に落ちるように、私たちに参加し、私達に連絡します

おすすめ

転載: www.cnblogs.com/xueweihan/p/11529101.html