Pythonでの単体テストの作成:開始するにはどうすればよいですか?[閉まっている]


534

私はPythonで最初の適切なプロジェクトを完了しましたが、今の仕事はそのためのテストを書くことです。

プロジェクトをやったのは初めてなので、テストを書くのはこれが初めてです。

問題は、どうやって始めるかです。まったくわからない。テストを書くことから始めるために使用できるドキュメント/チュートリアル/リンク/本を誰かに教えてもらえますか(特にユニットテストを推測しています)

このトピックに関するアドバイスは歓迎されます。


4
それがあなたの意図であれば、テストを書くのに遅すぎることは決してありません。文句を言うすべてのために何もないよりもいくつか持っている方がいい...
Asken

1
これは無料のオンラインで公開されている優れたテスト駆動型開発ブックです。chimera.labs.oreilly.com
Will

4
https://www.jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/を偶然見つけました。Pythonの初心者として、私はそれを理解できると思いました。
フェリー

2
Pythonのヒッチハイク・ガイドは、ユニットテストのためのツールの簡単な概要を持っていますpython-guide-pt-br.readthedocs.io/en/latest/writing/tests
アントンタラセンコ

ガイドにもgithub.com/kennethreitz/samplemodにサンプルコードリポジトリがあり、開始するのに最適な場所であるため、前のコメントの評価を高くする必要があります。
setempler

回答:


101

ユニットテストを初めて使用する場合は、最も簡単な学習方法が最適です。その上py.test、デフォルトのunittestモジュールではなく使用することをお勧めします

同じことを行う次の2つの例を考えてみます。

例1(単体テスト):

import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __name__ == "__main__":
    main()

例2(pytest):

def test_starting_out():
    assert 1 == 1

両方のファイルの名前がであると仮定してtest_unittesting.py、テストをどのように実行しますか?

例1(単体テスト):

cd /path/to/dir/
python test_unittesting.py

例2(pytest):

cd /path/to/dir/
py.test

7
私は複数の場所(でpy.testの簡素化について聞いたことがdocs.python-guide.org/en/latest/writing/tests/#py-testdocs.python.org/3.5/library/unittest.html#module -unittestjeffknupp.com/blog/2013/12/09/...)なぜされてunit-testまだ、標準ライブラリに含まれている場合py.testと、noseはるかに簡単なインターフェイスと同じ機能を提供しますか?それだけで、下位互換性を提供することであり、あるいはんunittestいくつかの利点があることを持っているpy.testし、nosetest提供することはできませんか?
alpha_989

@ alpha_989標準のPythonライブラリは、利用可能な最良のツールを含むことを意図していません。それがPyPIの目的です。標準unittestパッケージで十分です。これは標準であり、正常に動作することが保証されています。最後に、コードを使用する人は誰でも、追加のパッケージをインストールする必要はありません。
ジェイコモン

72

無料のPythonの本であるDive Into Pythonには、ユニットテストに関する章があり、役立つと思います。

現代の慣例に従っている場合は、プロジェクトの作成中にテストを作成し、プロジェクトがほぼ終了するまで待たないでください。

少し遅れましたが、今度は知っています。:)


13
ユニットテストのないコードをリファクタリングする場合は、最初にユニットテストを記述する必要があります
Hubert Kario

9
ええ、初めてユニットテストに参加する多くの人々は、「まあ、それはあなたの現在のプロジェクトにはちょっと遅すぎる」と古い手から聞いています。 。木を植えることについての中国のことわざに似ています。テストを開始するのに最適な時期は、プロジェクトの開始時です。テストを開始する2番目に良い時期は今です!
JP

4
Pythonリンクへの飛び込みが壊れています... :-(
Scott Skiles

40

私の意見では、チェックに適した3つの優れたPythonテストフレームワークがあります。
unittest-モジュールはすべてのPythonディストリビューションの
ノーズに標準で付属しています-unittestテストを実行でき、ボイラープレートが少なくなっています。
pytest-単体テストも実行し、定型文が少なく、レポートが改善され、優れた追加機能がたくさんあります

これらすべてを適切に比較するには、http://pythontesting.net/start-hereでそれぞれの紹介を読んでください。
フィクスチャに関する拡張記事などもあります。


35

unittestのドキュメントから始めるのが良いでしょう。

また、現在は少し遅れていますが、将来的にはプロジェクト自体の前または最中に単体テストを作成することを検討してください。そうすれば、それらを使用してテストを進めることができ、(理論的には)回帰テストとして使用して、コードの変更によって既存のコードが破損していないことを確認できます。これはテストケースを書くことの完全な利点をあなたに与えます:)


これは、テスト駆動開発が必要な場合であり、これは悪いことではありません。私の場合、既存のコードを調べて、合格するテストを作成して調整することで理解しようとしていますunittest。コツをつかんだら、それを開発にさらに使用し、各ユニットのテストケースの数を増やします。
icedwater、2015

27

unittestには標準ライブラリが付属していますが、nosetestsをお勧めします。

noseはunittestを拡張してテストを容易にします。

私もあなたにパイリンをお勧めします

Pythonのソースコードを分析して、バグや低品質の兆候を探します。


8

他の人がすでに答えたように、ユニットテストを書くのは遅いですが、遅すぎません。問題は、コードがテスト可能かどうかです。実際、既存のコードをテストするのは簡単ではありません。これについての本もあり、レガシーコードを効果的に使用することができます(要点または先行PDFを参照)。

ユニットテストを書くかどうかはあなたの呼び出しです。面倒な作業になる可能性があることに注意してください。これに取り組み、単体テストを学ぶか、最初に受け入れ(エンドツーエンド)テストを作成することを検討し、コードを変更するか、プロジェクトに新しい機能を追加するときに、単体テストの作成を開始します。


2
「レガシーコードを効果的に使用する」ための+1。テストのないコードがすべてです。
David

3

nosetestsは、Pythonでの単体テストのための素晴らしいソリューションです。単体テストベースのテストケースとdoctestの両方をサポートしており、単純な構成ファイルで簡単に開始できます。


nosetestsリンクは廃止されました。新しい場所は次のようです:nose.readthedocs.org/en/latest
odigity

1
githubの上のドキュメントやウェブサイトnosetestあたりとして、nose及びnose2maintananceモードです。py.testより多くのサポートがあるため、最初に開始する方がよい
alpha_989
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.