2016-04-01 22 views
1

Her Cython kitaplığında bir model ve diğer bileşenlere sahip bir projem var. Denemeler yaptım ve bu para cezasını kapsam dahilinde çalıştırabilirim, ancak sadece test kodunun kapsama bilgilerini aldım (test kodunun çağırdığı kütüphaneler değil). Hata ayıklama izleme işlemini kapsam dahilinde kullanmayı denedim, ancak kitaplık kodlarından herhangi birini okuma girişimi göstermiyor (İzleme veya İzleme için hiçbir giriş almadım). Cython.coverage eklentisinin tamamı için linetrace, CYTHON_TRACE = 1 ve .coveragerc öğelerinin tümü açık. Model.c kodunu \ 'a kopyalamaya çalıştım ama bu yardımcı olmadı.Coverage.py/Cython - Cython kütüphanesi, karmaşık olmayan proje ile izlenemeyen

include '..\\submodel.pxi' 
:

\model.pyd 
\setup.py 
\src\models\windows\model.pyx 
\src\models\windows\model.c 
\src\models\submodel.pxi 
\tests\models\test_model.py 

pencerelerde kodu \ model.pyx böyle \ src \ modellerinden kod platform bağımsız parçalardan oluşan bir dizi içerir: Burada

(kısmi) projesi yapıdır

setup.py

python setup.py build_ext --inplace 

ile \ çalıştırılan ve görünümü de şu:

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')] 
      ) 
    ]) 
) 

unittests İşte (etkin eklenti hata ayıklama ile) kapsama rapor çıkışı

coverage run -m unittest discover 

sahip modellerde \ \ testlerden çalıştırılır. test_model burada bildirilen değil model.pyx ve submodel.pxi kod sürü çalıştıran:

Loaded plugin 'Cython.Coverage': <Cython.Coverage.Plugin object at 0x02F2AA30> 
Name      Stmts Miss Cover 
-------------------------------------------- 
test_model.py    40  1 98% 
-------------------------------------------- 
TOTAL      40  1 98% 

testi yüksek dizinden PYD dosyasını çıkarmak üzere bu kod parçacığı ile başlar Her ünite:

sys.path.append('..\\..\\') 
from model import Model 
... 

Bunun proje yapısıyla ilgili bir şey olduğuna eminim ve test kablolarını yüklemek için kaynak dosyaları test dizinlerine kopyalamaktan sakınmıyorum ama bunun gerçekleşmesi için doğru kombinasyonu tam olarak anlayamıyorum . Tüm yardımlar kabul edilir.

cevap

1

Tabii ki hepsini yazdıktan sonra cevap temel dikkatsizlikti.

setup.py'un değiştirilmesi, C kodunu otomatik olarak yeniden derlemez ve C kodunda CYTHON_TRACE=1 güncelleştirmesi yoktur. Bir kez tüm C/pyd dosyalarını kaldırdım ve setup.py'u yeniden çalıştırdım.

Hata ayıklama izlemesi modül içermediğini gösterdiği için yardımcı olsaydı, çünkü bunlar alet içermedikleri için pyx/C dosyalarına erişme yeteneğine sahip değildi.