[TIP] Getting Weird Coverage Reports

Alfredo Deza alfredodeza at gmail.com
Fri Nov 25 04:22:56 PST 2011


On Fri, Nov 25, 2011 at 7:07 AM, John Anderson <sontek at gmail.com> wrote:

>
>
> On Fri, Nov 25, 2011 at 6:00 AM, Michael Foord <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.

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
> http://lists.idyll.org/listinfo/testing-in-python
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20111125/3ac69829/attachment.htm>


More information about the testing-in-python mailing list