[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