Planet Python 日本語 フォロー ネッド・バチェルダー:発信者専用カバレッジ 著者は、関数ごとの呼び出し元単位でコードカバレッジを測定したいと考えている。これは、BASICインタープリタであるAcidicaのエラーチェックコードのリファクタリングに動機づけられている。当初、各組み込み関数は独自の引数検証を持っており、エラー条件の特定のカバレッジを可能にしていた。リファクタリング後、検証が共有ヘルパー関数に移動したため、この詳細なカバレッジは失われた。提案されている解決策は、coverage.pyの動的コンテキストを活用するデコレータを含んでいる。このデコレータは、装飾された関数を実行する前に、呼び出しサイト(ファイルと行番号)にちなんで名付けられた新しいカバレッジコンテキストを作成する。関数完了時に、元のコンテキストが復元される。coverage.Coverage.current()とcov.switch_context()を使用した概念実証デコレータは、この機能を示している。これには、ネストされたコンテキストをサポートするために、coverage.pyのマイナーで未リリースな変更が必要となる。著者は、HTMLカバレッジレポートがexpects関数の各呼び出し元に対して個別のコンテキストを表示し、誰がどのブランチを実行したかを明らかにしたことを発見した。将来の改善には、これらのコンテキストを後処理して特定の呼び出し元に対するカバレッジ不足を特定することや、階層的または複数のコンテキストを有効にして呼び出し元と実行詳細の両方を同時に追跡することが含まれる。著者はまた、デコレータでソースコードを変更するのではなく、coverage設定を通じてこの機能を統合することを目指している。潜在的なアプリケーションには、func_nameのような関数引数をコンテキスト識別子として使用することが含まれる。 Ned Batchelder: Caller-specific coverage nedbatchelder.com Planet Python 日本語 RSS thenote.app
coverage.Coverage.current()とcov.switch_context()を使用した概念実証デコレータは、この機能を示している。これには、ネストされたコンテキストをサポートするために、coverage.pyのマイナーで未リリースな変更が必要となる。著者は、HTMLカバレッジレポートがexpects関数の各呼び出し元に対して個別のコンテキストを表示し、誰がどのブランチを実行したかを明らかにしたことを発見した。将来の改善には、これらのコンテキストを後処理して特定の呼び出し元に対するカバレッジ不足を特定することや、階層的または複数のコンテキストを有効にして呼び出し元と実行詳細の両方を同時に追跡することが含まれる。著者はまた、デコレータでソースコードを変更するのではなく、coverage設定を通じてこの機能を統合することを目指している。潜在的なアプリケーションには、func_nameのような関数引数をコンテキスト識別子として使用することが含まれる。