New issue 660: Module scope fixture runs on function scope
https://bitbucket.org/hpk42/pytest/issue/660/module-scope-fixture-runs-on-function

Praveen Shirali:

I came across the following situation which I have simplified into the example 
below.
If a `Module Fixture` depends on a `Function Fixture` and a test depends on 
both, but has `(Function Fixture, Module Fixture)` in its argument order, the 
`Module Fixture` is reduced to run as a `Function Fixture`

Tested on py.test 2.6.4

```
#!python

import pytest

class SomeClass(object): pass

@pytest.fixture
def function_fixture(request):
    def fin():
        print "I am a function finalizer"
    request.addfinalizer(fin)
    print "\n"
    print "I am a function fixture"
    return SomeClass()

@pytest.fixture(scope="module")
def module_fixture(request, function_fixture):
    def fin():
        print "I am a module finalizer"
    request.addfinalizer(fin)
    print "I am a module fixture"
    return SomeClass()

def test_one(function_fixture, module_fixture):
    print "Test One"
    print "Module Fixture: {}".format(module_fixture)

def test_two(function_fixture, module_fixture):
    print "Test Two"
    print "Module Fixture: {}".format(module_fixture)

```

Output: (-s --verbose)
```
test.py::test_one

I am a function fixture
I am a module fixture
Test One
Module Fixture: <test.SomeClass object at 0x102f037d0>
PASSEDI am a module finalizer
I am a function finalizer

test.py::test_two

I am a function fixture
I am a module fixture
Test Two
Module Fixture: <test.SomeClass object at 0x102f48fd0>
PASSEDI am a module finalizer
I am a function finalizer
```

Notice that the Module Fixture code has executed twice and the addresses of the 
SomeClass instances are different.

If `module_fixture` did not depend on `function_fixture`, the `module_fixture` 
would run only once. Test function calling `(module_fixture, function_fixture)` 
results in a `ScopeMismatchError`.


_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
https://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to