[TIP] Getting Weird Coverage Reports

Alfredo Deza alfredodeza at gmail.com
Fri Nov 25 04:32:16 PST 2011


On Fri, Nov 25, 2011 at 7:22 AM, Alfredo Deza <alfredodeza at gmail.com> wrote:

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

I forgot to reference the link :(

[0] https://github.com/pecan/pecan/blob/master/pecan/testing.py#L34-39

>
> 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/dc781a9c/attachment.htm>


More information about the testing-in-python mailing list