2015-04-04 6 views
8

Moje testy wyraźnie spełniają każdą funkcję, a także nie ma niewykorzystanych importów. Jednak, jak wynika z raportu pokrycia 62% kodu nigdy nie został wykonany w następujący plik:Testowanie kolb - dlaczego pokrycie wyklucza instrukcje importu i dekoratory?

enter image description here

Czy ktoś mógłby wskazać na to, co mogę robić źle?

Oto jak zainicjować zestaw testów i zasięg:

cov = coverage(branch=True, omit=['website/*', 'run_test_suite.py']) 
    cov.start() 

    try: 
     unittest.main(argv=[sys.argv[0]]) 
    except: 
     pass 

    cov.stop() 
    cov.save() 

    print "\n\nCoverage Report:\n" 
    cov.report() 

    print "HTML version: " + os.path.join(BASEDIR, "tmp/coverage/index.html") 
    cov.html_report(directory='tmp/coverage') 
    cov.erase() 

Odpowiedz

7

Jest to trzecie pytanie w coverage.py FAQ:

Q: Dlaczego ciała funkcji (lub klasach) Pokaż jak wykonano, ale linie def nie zawierają?

Dzieje się tak, ponieważ zasięg jest uruchamiany po zdefiniowaniu funkcji . Linie definicji są wykonywane bez pokrycia pomiarowego, następnie rozpoczyna się pokrycie, a następnie wywoływana jest funkcja. Oznacza to, że ciało jest mierzone, ale sama definicja funkcji nie jest.

Aby to naprawić, rozpocznij wcześniej pokrycie. Jeśli użyjesz linii poleceń do , uruchom program z zasięgiem, wtedy cały twój program będzie monitorowany . Jeśli używasz interfejsu API, musisz wywołać funkcję coverage.start() przed zaimportowaniem modułów definiujących twoje funkcje.

Najprostszą rzeczą do zrobienia jest prowadzony ci testy pod pokrycia:

$ coverage run -m unittest discover 

Niestandardowy skrypt testowy nie robi znacznie poza to, co linia poleceń pokrycie zrobi, to będzie prostsze po prostu użyć wiersz poleceń.

Powiązane problemy