1. UnitTest フレームワークとは何ですか?
UnitTest フレームワークは、Python に付属する単体テスト フレームワークで、主に単体テストに使用され、次の特徴があります。
- 複数のユースケースを整理して実行する機能
- 豊富なアサーションメソッドを提供
- テストレポートを生成する機能
2. UnitTest のコア要素
1.TestCase (コア モジュール)
TestCase (テスト ケース)。テスト ケースは単体テスト フレームワークのコンポーネントであり、手動および自動プロセスでテスト ケースと呼ばれるものではないことに注意してください。
主な機能: 各 TestCase はコード ファイルであり、実際のユースケース コードはこのコード ファイルに記述されます。
2.TestSuite
TestSuite(テストスイート)は、複数のTestCaseを管理、組み立てるために使用されます
3.TestRunner
TestRunner(テスト実行、テスト実行)、TestSuite(テストスイート)の実行に使用します
4.TestLoader
TestLoader(テストローディング)は、TestSuite(テストスイート)機能を補足する機能で、複数のTestCaseを管理、組み立てるために使用されます。
5.Fixture
Fixture(テストフィクスチャ)は、TestCase(テストケース)のコードで記述され、各メソッドの前後で実行できるコード構造です。
3. テストケース
TestCase はコード ファイルです。実際のユース ケース コードはコード ファイルに記述されます。コード ファイルの名前は識別子の規則に従って記述する必要があります (コードの機能はファイルの先頭で説明できます)注釈)
使用手順:
- ガイドパッケージ(単体テスト)
- カスタムテストクラス
- テストクラスにテストメソッドを記述する
- ユースケースを実行する
"""
代码目的: 学习TestCase(测试用例)模块的书写方法
"""
# 1. 导包
import unittest
# 2. 自定义测试类,需要继承unittest模块中的TestCase类即可
class TestDemo(unittest.TestCase):
# 3. 书写测试方法, 也就是真正的测试代码
# 书写要求,测试方法必须以test_开头(本质是以test开头)
def test_method1(self):
print('TestCase1')
def test_method2(self):
print('TestCase2')
# 4. 执行测试用例
テストケースメソッドを実行する場合、次の 2 つの方法があります。
- クラス名の後にカーソルを置いて実行すると、クラス内のすべてのテスト メソッドが実行されます。
2. メソッド名の後にカーソルを置き、現在のメソッドのみを実行します。
よくある質問
1. コード ファイルの名前が不規則である
1. コード ファイルの名前が数字で始まる
2. コード ファイルの名前にスペースが含まれる
3. コード ファイルの名前に漢字が含まれる
4. その他の特殊記号
(数字、文字、および文字で構成される)アンダースコア、数字で始めることはできません)
2. コードを実行しても結果がありません
右クリックして実行するときに単体テストを求めるプロンプトは表示されません。
問題の解決策は次のとおりです。
- 新しいコード ファイルを作成し、書き込んだコードをそこにコピーします
- 既存の実行モードを削除して、
unittest モードがデフォルトで使用されるようにします。
3. ユースケースが見つかりません。
テストメソッドが test で始まっていないか、単語の記述が間違っています。
四、TestSuite & TestRunner
TestSuite (テスト スイート):
TestCase (テスト ケース) ファイルをパッケージ化してアセンブルする TestRunner (テスト実行) を管理します。 TestSuite (スイート) の
ステップを実行します。
- ガイドパッケージ(単体テスト)
- スイート オブジェクトのインスタンス化 (オブジェクトの作成)
- スイートオブジェクトを使用したユースケースメソッドの追加
4. 実行オブジェクトのインスタンス化
実行オブジェクトを使用したスイートオブジェクトの実行
特定のコード:
TestSuite (テスト スイート): 複数の TestCase を管理するために使用されます。最初に複数の TestCase ファイルを作成する必要があります。
"""
学习 TestSuite 和 TestRunner使用
"""
# 1. 导包
import unittest
from test.testcase_1 import TestDemo1
from test.testcase_2 import TestDemo2
# 2. 实例化套件对象
suite = unittest.TestSuite()
# 3. 使用套件对象添加用例方法
# 方式一: 套件对象.addTest(测试类名('方法名')) 建议直接复制
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method1'))
# 4. 实例化运行对象
runner = unittest.TextTestRunner()
# 5. 使用运行对象去执行套件
runner.run(suite)
テスト スイート オブジェクトを使用してテスト ケース メソッドを追加する 2 番目の方法:
# 方式二: 将一个测试类的所有方法进行添加
# 套件对象.addTest(unitest.makeSuite(测试类名))
# 缺点: makeSuite() 这个方法官方是不太建议用的
suite.addTest(unittest.makeSuite(TestDemo1))
suite.addTest(unittest.makeSuite(TestDemo2))
次のプロンプト メッセージが表示されます: DeprecationWarning:unittest.makeSuite() は非推奨であり、Python 3.13 で削除されます。代わりに、unittest.TestLoader.loadTestsFromTestCase() を使用してください。suite.addTest
(unittest.makeSuite(TestDemo1))。実行が終了する
と、上記の記号は特定の意味を持ちます:
. はユース ケースが成功したことを意味し、F はユース ケースが失敗したことを意味し、E エラーはユース ケース コードに問題があることを意味します。
注:
1.unittest.TestSuite() およびunittest.TextTestRunner() はメソッドであり、かっこが必要です。
2. ランタイム オブジェクトは .TestRunner() ではなく .TextTestRunner() です。