私はCythonライブラリにそれぞれモデルとその他のコンポーネントを持つプロジェクトを持っています。私は単体テストを作成し、それをカバレッジ付きで実行できますが、テストコード自体のカバレッジ情報を取得します(テストコードが呼び出すライブラリではありません)。私はカバレッジでデバッグトレース操作を使用しようとしましたが、ライブラリコードを読み込もうとしていません(トレースまたはトレースなしのエントリがありません)。私はlinetrace、CYTHON_TRACE = 1、Cython.coverageプラグインの.coveragerc項目がすべてオンになっています。私はmodel.cのコードを\にコピーしようとしましたが、それは役に立たないようです。Coverage.py/Cython - unittestを使用した複雑なプロジェクトでCythonライブラリをトレースできません
include '..\\submodel.pxi'
:model.pyxはこのようなのsrc \モデル\からのコードのプラットフォームに依存しないピースの数を含んで\
\model.pyd
\setup.py
\src\models\windows\model.pyx
\src\models\windows\model.c
\src\models\submodel.pxi
\tests\models\test_model.py
ウィンドウ内のコード:ここで
(部分)プロジェクト構造であります
setup.pyは
python setup.py build_ext --inplace
で\から実行し、次のようになりますされています
のfrom distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Compiler.Options import directive_defaults
import numpy
# Needed for line_profiler - disable for production code
directive_defaults['linetrace'] = True
directive_defaults['binding'] = True
setup(
ext_modules = cythonize([
Extension("model",
["src\models\windows\model.pyx"]
#,extra_compile_args = ["-O3"]
# CYTHON_TRACE required for coverage and line_profiler. Remove for release.
,define_macros=[('CYTHON_TRACE', '1')]
)
])
)
ユニットテストここで
coverage run -m unittest discover
でモデル\ \テストから実行される(有効なプラグインのデバッグ付き)カバレッジレポート出力です。 test_modelは、ここで報告されていないですmodel.pyxとsubmodel.pxiのコードの多くを実行している:
Loaded plugin 'Cython.Coverage': <Cython.Coverage.Plugin object at 0x02F2AA30>
Name Stmts Miss Cover
--------------------------------------------
test_model.py 40 1 98%
--------------------------------------------
TOTAL 40 1 98%
各ユニットテストは上位ディレクトリからPYDファイルを引くために、このコードスニペットで始まる:
sys.path.append('..\\..\\')
from model import Model
...
これはプロジェクトの構造と関係していると確信しています。テスト用のハーネスをロードするために、ソースファイルをテスト用のディレクトリにコピーしても構いませんが、正しい組み合わせを見つけ出すことはできません。すべての助けを歓迎します。