[TIP] Getting Weird Coverage Reports

Michael Foord michael at voidspace.org.uk
Fri Nov 25 07:56:08 PST 2011


On 25/11/2011 12:22, Alfredo Deza wrote:
>
>
> On Fri, Nov 25, 2011 at 7:07 AM, John Anderson <sontek at gmail.com 
> <mailto:sontek at gmail.com>> wrote:
>
>
>
>     On Fri, Nov 25, 2011 at 6:00 AM, Michael Foord
>     <michael at voidspace.org.uk <mailto:michael at voidspace.org.uk>> wrote:
>
>         On 25/11/2011 11:55, John Anderson wrote:
>>         I have a base class that all my models inherit from:
>>
>>         http://paste2.org/p/1796621
>>
>>         and majority of my tests are touching models and I even have
>>         tests against this specific class:
>>
>>         http://paste2.org/p/1796622
>>
>>         Yet, when I run a coverage test in py.test:
>>         py.test --cov-report=term-missing --cov app/models.py
>>
>>         app/models      46     23    50%   1-27, 37-40, 59, 65, 76, 82-84
>>
>>
>>         How are lines 1-27 not covered?
>
>         All of those lines (imports, class definition, decorator
>         application) are executed at *import time* (i.e. when the
>         module is first created). The fact that those lines are
>         reported as not covered implies to me that you are starting
>         the test run (and therefore importing your models) before
>         coverage is started.
>
>         You need to run your tests under the coverage tool, or ensure
>         that coverage tracing is started before any imports execute.
>
>
>     Ahh, So I have some py.test configuration, so that a test database
>     is set to a clean slate when I start my tests, I thought
>     pytest_configure would be late enough, but I guess its not?  This
>     is what i'm doing:
>
>     from test_settings import settings
>     from pyramid.config import Configurator
>     from app.models import register_models
>     from app.models import Entity
>
>
>     def pytest_configure():
>         url = settings.get('sqlalchemy.url')
>         echo = settings.get('sqlalchemy.echo')
>
>         print 'Creating the tables on the test database %s' % url
>
>         config = Configurator(settings=settings)
>
>         register_models(config)
>
>         Entity.setup_database(url, echo=echo, drop=True, create=True)
>
>
> Hi John,
>
> This is a similar problem that the Pecan [0] framework had (still?) 
> for exposing configuration setup for the actual application
> at test time.
>
> The problem is (as you suspect) that the configuration in 
> pytest_configure happens *before* any of the mechanisms for coverage 
> start.

It is worth filing an issue against py.test. It may be possible to fix 
in future versions so that coverage tracing starts before configuration 
is done.

All the best,

Michael Foord

>
> My suggestion would be not to use this and to try and have a base 
> class that you can use for your tests that include this configuration and
> database setup.
>
>
>     _______________________________________________
>     testing-in-python mailing list
>     testing-in-python at lists.idyll.org
>     <mailto:testing-in-python at lists.idyll.org>
>     http://lists.idyll.org/listinfo/testing-in-python
>
>
>
>
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python


-- 
http://www.voidspace.org.uk/

May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing http://www.sqlite.org/different.html

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20111125/07a4ec73/attachment.htm>


More information about the testing-in-python mailing list