テストのために、mock
モジュール(新しいpython 3では標準、古いバージョンではpypiからダウンロード可能)を使用して "偽の"クラスを作成できます。モックライブラリにはこれを行う方法を説明する素晴らしい記事があります。私はhereをリンクしてくれました。あなたのtest.pyファイルは以下のようなものになります。 mock
モジュールを使用して
from pqr import pq
import mock
class TestLm(unittest.Testcase):
@mock.patch(pq.LM)
def test_lm(self, mock_lm):
my_ab = pq.AB()
my_ab.echo()
、単にあなたの試験方法上記のデコレータでそれを「パッチ適用」によって、あなたは試験方法に使用できるモジュール/クラスのモックバージョンを作成することができます。これにより、指定されたモジュール/クラスの元のバージョンがMagicMockオブジェクトに置き換えられ、テストメソッドに第2引数として渡されます。このMagicMockは実際にはLm
の機能を実行しませんが、どのように動作するかについてアサーションを行うことができます。必要に応じて、後で機能を無効にすることができます。しかし、私はリンクされたガイドで説明されているキャッチがあります。 Lm
を、使用されているモジュールからインポートする必要があります。従来の方法では使用できません。インポートの場合、Pythonはインポートされるモジュールに固有のモジュールオブジェクトを作成します。そのため、その機能をテストするためにpq
モジュールから特定のLm
オブジェクトをモックする必要があります。ライブラリは最初は少し複雑で、単一のStackOverflow答えでカバーするのに必要な情報よりはるかに多くの情報が含まれているので、読んでみることをお勧めします。
mock
モジュールのマニュアルはhereです。 Python 2.7バージョンのダウンロードはhereです。
私はかなり自分自身mock
ライブラリに新しいですので、私が間違っている場合私を修正する気軽に!
編集:Martijnの答えを見て、私はmy_abコンストラクタで括弧を忘れてしまったことに気付きました!
PythonはMonkey-Patchingをサポートしています。単純に 'pqr.pq.Lm = your_mockup'を呼び出すことができ、' Ab'は元の 'Lm'の代わりに' your_mockup'を使います。 (これはあなたの質問に答えますが、テストのための最良のパターンではないかもしれません。代わりの 'Lm'実装を渡すために' Ab'のコンストラクタを変更することを検討してください) – Phillip
@Phillipはあなたの答えに感謝します。それを完全に取得していない、私はこれの作業のコードスニペットを与えることができます、私はテストフレームワークの初心者です。 – Sanket