ホームページ >バックエンド開発 >Python チュートリアル >Pythonの単体テストとは何ですか? (詳細な例)
次の記事では、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 1mydict.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 サイトの他の関連記事を参照してください。