Pythonの単体テストとは何ですか? (詳細な例)

乌拉乌拉~
リリース: 2018-08-23 13:38:14
オリジナル
2605 人が閲覧しました

次の記事では、Python における単体テストとは何かについて学びます。 Python 単体テストと、Python プログラミングにおいて Python 単体テストが果たせる役割について学びます。

単体テスト

単体テストは、モジュール、関数、またはクラス Work の正確さをテストするために使用されます。

たとえば、関数 abs() の場合、次のテスト ケースを作成できます:

1. 1、1.2、0.99 などの正の数を入力し、戻り値を期待します。入力と同じになるようにします;

2. -1、-1.2、-0.99 などの負の数値を入力すると、戻り値が入力と逆になることが期待されます;

##3 0 を入力すると 0 が返されることが予想されます;

4.None、[]、{} などの数値以外の型を入力した場合は、TypeError がスローされることが予想されます。

上記のテスト ケースをテスト モジュールに入れます。これは完全な単体テストです。

単体テストに合格した場合、テストした関数が正常に動作できることを意味します。単体テストが失敗した場合は、関数にバグがあるか、テスト条件の入力が間違っているかのどちらかであり、単体テストを成功させるにはそれを修正する必要があります。

単体テストに合格することの意義は何ですか? abs() 関数のコードを変更する場合は、単体テストを再度実行するだけで済みます。合格した場合は、変更が abs() 関数の元の動作に影響を与えないことを意味します。テストが失敗した場合は、変更が元の動作と矛盾する場合は、コードを変更するか、テストを変更することを意味します。

このテスト駆動開発モデルの最大の利点は、プログラム モジュールの動作が設計したテスト ケースに確実に準拠していることです。将来変更された場合でも、モジュールの動作が依然として正しいことが大幅に保証されます。

Dict クラスを作成しましょう。このクラスは dict と同じように動作しますが、属性を通じてアクセスできます。次のように使用されます:

 >>> d = Dict(a=1, b=2)
>>> d['a']
1
>>> d.a
1
ログイン後にコピー

mydict.py コードは次のとおりです:

class Dict(dict):
    def __init__(self, **kw):
        super().__init__(**kw)
    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
    def __setattr__(self, key, value):
        self[key] = value
ログイン後にコピー

単体テストを作成するには、Python に付属の Unittest モジュールを導入し、次のように mydict_test.py を作成する必要があります:

import unittest

from mydict import Dict
class TestDict(unittest.TestCase):
    def test_init(self):
        d = Dict(a=1, b='test')
        self.assertEqual(d.a, 1)
        self.assertEqual(d.b, 'test')
        self.assertTrue(isinstance(d, dict))
    def test_key(self):
        d = Dict()
        d['key'] = 'value'
        self.assertEqual(d.key, 'value')
    def test_attr(self):
        d = Dict()
        d.key = 'value'
        self.assertTrue('key' in d)
        self.assertEqual(d['key'], 'value')
    def test_keyerror(self):
        d = Dict()
        with self.assertRaises(KeyError):
            value = d['empty']
    def test_attrerror(self):
        d = Dict()
        with self.assertRaises(AttributeError):
            value = d.empty
ログイン後にコピー

単体テストを作成するときは、テストを作成する必要があります。 Unittest.TestCase を継承するクラス。

test で始まるメソッドはテスト メソッドです。test で始まらないメソッドはテスト メソッドとみなされず、テスト中に実行されません。

テストの種類ごとに test_xxx() メソッドを作成する必要があります。 Unittest.TestCase には多くの組み込みの条件判断が用意されているため、これらのメソッドを呼び出すだけで、出力が期待どおりであるかどうかを確認できます。最も一般的に使用されるアサーションは、assertEqual() です:

self.assertEqual(abs(-1), 1) # 断言函数返回的结果与1相等
ログイン後にコピー

もう 1 つの重要なアサーションは、指定されたタイプのエラーがスローされることを期待することです。たとえば、d['empty'] を通じて存在しないキーにアクセスする場合などです。の場合、アサーションは KeyError をスローします:

with self.assertRaises(KeyError):
    value = d['empty']
ログイン後にコピー

d.empty を介して存在しないキーにアクセスする場合、AttributeError がスローされることが予想されます:

with self.assertRaises(AttributeError):
    value = d.empty
ログイン後にコピー

単体テストの実行

単体テストを作成したら、単体テストを実行できます。これを実行する最も簡単な方法は、mydict_test.py の最後に次の 2 行のコードを追加することです。

if __name__ == '__main__':
    unittest.main()
ログイン後にコピー

这样就可以把mydict_test.py当做正常的python脚本运行:

$ python mydict_test.py
ログイン後にコピー

另一种方法是在命令行通过参数-m unittest直接运行单元测试:

$ python -m unittest mydict_test
.....
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK
ログイン後にコピー

 这是推荐的做法,因为这样可以一次批量运行很多单元测试,并且,有很多工具可以自动来运行这些单元测试。

以上就是本篇文章所讲述的所有内容,这篇文章主要介绍了python单元测试的相关知识,希望你能借助资料从而理解上述所说的内容。希望我在这片文章所讲述的内容能够对你有所帮助,让你学习python更加轻松。

更多相关知识,请访问php中文网Python教程栏目。

以上がPythonの単体テストとは何ですか? (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート