セクション 5. 章 3
single
Unittestにおけるセットアップとティアダウン:テスト環境の管理
メニューを表示するにはスワイプしてください
テストの4つのフェーズ:
- SetUp:環境の準備。データベース内のオブジェクト作成、サービスの起動やデータベース接続の設定など、システム状態の構成が含まれる場合がある;
- Act:テスト対象の関数やメソッドの実行;
- Assert:結果を期待値と照合し、検証;
- TearDown:各テスト後のクリーンアップ。これにより、環境への変更が後続のテストに影響しないようにする。
SetUpとTearDownは任意のフェーズ。
SetUpとTearDownの実装
UnittestのsetUpおよびtearDownメソッドは、それぞれ各テストメソッドの前後に呼び出されるインスタンスメソッド。
ここでは、カスタムのBookおよび__repr__メソッドを持つsaleクラスを例に説明。
class Book:
def __init__(self, title, author, amount):
self.title = title
self.author = author
self.amount = amount
def __repr__(self):
return f"<Book {self.title}, written by {self.author}, {self.amount} pieces>"
def sale(self):
if self.amount > 0:
self.amount -= 1
else:
return "This book sold out"
次に、TestBookクラス内にテストケースを定義。
import unittest
class TestBook(unittest.TestCase):
def setUp(self):
print("Setting up the environment for each test.")
self.book = Book("1984", "George Orwell", 2)
def tearDown(self):
print("Cleaning up after each test.")
del self.book
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
test_saleケースが通過した後、setUpメソッドが各テストの前に実行されるため、test_book_reprでは本の冊数が元の値にリセットされる。
メソッドレベルのSetUpとTearDownにより、各テストがクリーンな環境で実行され、テストの予測性と独立性が確保される。
SetUpClassとTearDownClassの実装
これらはテストクラス全体で一度だけ、テストスイートの開始時と終了時に実行されるクラスメソッド。
class TestBook(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""This code will run before all tests"""
print("Setting up the environment for all tests.")
cls.book = Book("1984", "George Orwell", 2)
@classmethod
def tearDownClass(cls):
"""This code will run after all tests"""
print("Cleaning up after all tests.")
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
# An AssertionError will occur because the amount was changed in the
# 'test_sale' and the book was not updated prior to this test.
クラスレベルのSetUpとTearDownは、作成や破棄にコストがかかるリソースの準備やクリーンアップのオーバーヘッドを削減する。
タスク
スワイプしてコーディングを開始
unittestのsetUpおよびtearDownメソッドを使い、Bookクラスのテストを実践します。
TestBookを継承したテストクラスunittest.TestCaseを定義します。setUpメソッドを実装し、タイトルがBook、著者が'1984'、冊数が'George Orwell'の2インスタンスを作成し、self.bookに代入します。tearDownメソッドを実装し、self.bookインスタンスを削除します。test_saleという名前のメソッドを追加し、以下を行います:self.bookのsaleメソッドを2回呼び出す;- 2回目の呼び出しの戻り値が
'This book sold out'であることをアサートします。
test_book_reprという名前のメソッドを追加し、self.bookの文字列表現が'<Book 1984, written by George Orwell, 2 pieces>'であることをアサートします。- テストが通るように、必ずこれらの関数名およびクラス名を正確に使用してください。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 5. 章 3
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください