1

このモジュールをテストしたいとします。

import osutils

def check_ip6(xml):
  ib_output = osutils.call('iconfig ib0')
  # process and validate ib_output (to be unit tested)
  ...

このメソッドは、システム コール (特定のネットワーク インターフェイスを想定) を行うため、環境に依存しているため、テスト マシンで呼び出すことはできません。

ib_output の処理が期待どおりに機能するかどうかをチェックする、そのメソッドの単体テストを書きたいと思います。したがって、モックosutils.callを作成して、テストデータを返すだけにします。それを行うための好ましい方法は何ですか?モッキングや (モンキー) パッチを適用する必要がありますか?

テスト例:

def test_ib6_check():
    from migration import check_ib6
    # how to mock os_utils.call used by the check_ib6-method?
    assert check_ib6(test_xml) == True
4

2 に答える 2

1

1つの解決策は、パッチを適用するときに、を呼び出す前に別のfrom osutils import callものに置き換えることです。yourmodule.calltest_ib6_check

于 2012-02-02T12:26:30.980 に答える
0

わかりました。これはモックとは関係がないことがわかりました。モンキーパッチが必要です。-methodをインポートして変更してから、osutils.callテスト対象のメソッドをインポートする必要があります(モジュール全体ではなく、インポートするため)。その後、元の呼び出しメソッド)。したがって、このメソッドは変更したcall-methodを使用します。

def test_ib6_check():
    def call_mock(cmd):
        return "testdata"    
    osutils.call = call_mock
    from migration import check_ib6
    # the check_ib6 now uses the mocked method
    assert check_ib6(test_xml) == True
于 2012-02-02T12:44:27.847 に答える