0

Pythonでテストする必要があるモジュールがあります。

unittest フレームワークを使用していますが、問題が発生しました。

モジュールにはいくつかのメソッド定義があり、そのうちの 1 つがインポート (readConfiguration) 時に次のように使用されます。

.
.
.
def readConfiguration(file = "default.xml"):
    # do some reading from xml

readConfiguration()

モジュールをインポートしようとすると、モジュールとプログラムが失敗する「readConfiguration」メソッドも実行しようとするため、これは問題です (構成ファイルがテスト環境に存在しません)。

構成ファイルとは無関係にモジュールをテストできるようにしたいと考えています。

モジュールを作成していないため、リファクタリングできません

ダミーの構成ファイルを含めることができることはわかっていますが、「よりクリーン」でエレガントなソリューションを探しています。

4

1 に答える 1

1

コメンターがすでに指摘しているように、インポートには副作用があってはならないので、可能であればモジュールを変更してみてください。

本当に絶対にこれができない場合は、別の方法があるかもしれません:readConfiguration()呼び出されるようにしますが、その依存関係をスタブ化します。たとえば、組み込み関数を使用する場合、ドキュメントopen()に示されているように、それをモックできます。mock

>>> mock = MagicMock(return_value=sentinel.file_handle)
>>> with patch('builtins.open', mock):
...     import the_broken_module
...     # do your testing here

sentinel.file_handle実際のコンテンツを提供する必要がStringIO("<contents of mock config file>")ある場合は に置き換えます。

の実装に依存するので脆いreadConfiguration()ですが、どうしても他に方法がない場合は、最後の手段として役立つかもしれません。

于 2013-10-06T08:43:49.933 に答える