Pythonでのテストに関しては、信頼できる孤立したテストが重要であることを確認します。一般的な課題の1つは、テスト中にオブジェクトと関数の動作をock笑または変更する方法です。これは、Pytest Monkeypatch Fixtureが輝く場所です。テスト中にコードの部分を動的に交換する柔軟な方法を提供します。
このブログでは、Monkeypatchの力、それが役立つ理由、そしてそれを使用してきれいで効果的なテストを書く方法を調べます。
。PytestのMonkeypatchフィクスチャを使用すると、次のことを変更または交換できます。
#my_app.py
def fetch_data():
#API呼び出しをシミュレートします
「実際のAPI応答」を返す
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"を模倣できます
#test_my_app.py
my_appインポートFETCH_DATAから
def test_fetch_data(monkeypatch):
def mock_fetch_data():
「mocked応答」を返す
monkeypatch.setattr( "my_app.fetch_data"、mock_fetch_data)
assert fetch_data()== "mocked応答"
# test_my_app.py from my_app import fetch_data def test_fetch_data(monkeypatch): def mock_fetch_data(): return "Mocked Response" monkeypatch.setattr("my_app.fetch_data", mock_fetch_data) assert fetch_data() == "Mocked Response"
#config.py
OSをインポートします
def get_database_url():
return os.getenv( "database_url"、 "default_url")
# config.py import os def get_database_url(): return os.getenv("DATABASE_URL", "default_url")
#test_config.py
config Import get_database_urlから
def test_get_database_url(monkeypatch):
monkeypatch.setenv( "database_url"、 "mocked_url")
assert get_database_url()== "mocked_url"
# test_config.py from config import get_database_url def test_get_database_url(monkeypatch): monkeypatch.setenv("DATABASE_URL", "mocked_url") assert get_database_url() == "mocked_url"
#my_class.py
クラス計算機:
def add(self、a、b):
bを返します
# my_class.py class Calculator: def add(self, a, b): return a b
#test_my_class.py
my_classインポート計算機から
def test_calculator_add(monkeypatch):
def mock_add(self、a、b):
返品42
monkeypatch.setattr(calculator、 "add"、mock_add)
calculturation()
Assert Calc.Add(1、2)== 42
# test_my_class.py from my_class import Calculator def test_calculator_add(monkeypatch): def mock_add(self, a, b): return 42 monkeypatch.setattr(Calculator, "add", mock_add) calc = Calculator() assert calc.add(1, 2) == 42
#my_module.py
def is_file_openable(filename):
試す:
open(filename、 "r"):
trueを返します
ioerrorを除く:
falseを返します
# my_module.py def is_file_openable(filename): try: with open(filename, "r"): return True except IOError: return False
#test_my_module.py
my_moduleからIS_FILE_OPENABLEからインポート
def test_is_file_openable(monkeypatch):
def mock_open(filename、mode):
ioerrorを育てる(「mocked ioerror」)
monkeypatch.setattr( "Builtins.open"、mock_open)
assert not is_file_openable( "test.txt")
# test_my_module.py from my_module import is_file_openable def test_is_file_openable(monkeypatch): def mock_open(filename, mode): raise IOError("Mocked IOError") monkeypatch.setattr("builtins.open", mock_open) assert not is_file_openable("test.txt")Monkeypatchでのベストプラクティス
ここに概説されている例とベストプラクティスを組み込むことにより、テストスイートを堅牢で保守可能にすることができます。公式のPytestドキュメントを調べて、詳細を学び、pytestの可能性を最大限に発揮してください!
ハッピーテスト!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3