2016-04-01 6 views
1

私は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 
... 

これはプロジェクトの構造と関係していると確信しています。テスト用のハーネスをロードするために、ソースファイルをテスト用のディレクトリにコピーしても構いませんが、正しい組み合わせを見つけ出すことはできません。すべての助けを歓迎します。

答えて

1

もちろん私はそれを書いた後、答えはすべて基本的な不注意でした。

setup.pyを変更すると、自動的にCコードが再コンパイルされず、CコードにはCYTHON_TRACE=1の更新が含まれませんでした。一度私はすべてのC/pydファイルを削除し、setup.py reran働いた。

デバッグトレースは、計測されていないためにpyx/Cファイルにトレースする機能がなかったため、モジュールが含まれていないことがわかりました。

関連する問題