私は Sphinx を使用して wxPython に依存するプロジェクトを文書化し、autodocs拡張機能を使用して、docstring からページを自動的に生成します。autodocs拡張機能は、すべてのモジュールで自動的に動作します。これは、パッケージには問題ありませんが、 wxPython のような大規模な外部ライブラリでは問題になります。したがって、wxPython からすべてを生成させる代わりに、ライブラリ モジュール(以前は外部パッケージMock ) を使用しています。最も基本的なセットアップは、wxPython のほとんどの部分で問題なく機能しますが、簡単な方法が見つからない状況に遭遇しました (おそらく、今週までモックに比較的慣れていなかったためです)。import
import
unittest.mock
現在、私のconf.py
ファイルの最後には次のものがあります。
MOCK_MODULES = ['wx.lib.newevent'] # I've skipped irrelevant entries...
for module_name in MOCK_MODULES:
sys.modules[module_name] = mock.Mock()
を除くすべての wxPython モジュールでwx.lib.newevent
、これは完全に機能します。ただし、ここではnewevent.NewCommandEvent()
function[1] を使用して特定のシナリオのイベントを作成しています。この場合、NewCommandEvent()
呼び出しに関する警告が表示され、メモが表示されTypeError: 'Mock' object is not iterable
ます。
単体テストを構築するためにこれを処理するためにパッチを適用する方法はわかりますが(これは来月行う予定です)、Sphinx 構成の単純なレベルでそれを統合する方法を理解するのに苦労しています。 .
編集:私も使っMagicMock()
てみました。これは同じポイントでまだエラーを生成しますが、現在はValueError: need more than 0 values to unpack
. これは正しい方向への一歩のように思えますが、この 1 つのモジュールに対して明示的に設定する以外に、これを処理する方法がまだわかりません。たぶんそれが最善の解決策ですよね?
脚注
- はい、それは関数であり、クラスのように見える命名規則です。wxPython は、wxWidgets ツールキット全体で使用される C++ 命名規則に従います。