Skip to content
This repository was archived by the owner on Dec 8, 2022. It is now read-only.

Commit fd22da1

Browse files
author
Leonidas Loucas
committed
test: Move setup and teardown to a autouse fixture
Pytest docs say that setup and teardown functions run prior to fixtures, therefore the plugin was always patching (being enabled), and strong guards via fixture cacheing were making it look like setup and teardown were called at the right time. By promotoing enable_plugin to a fixture in all cases, and using a autouse yield fixture to call setup and teardown we can make this under our full control
1 parent 27b2736 commit fd22da1

File tree

5 files changed

+59
-34
lines changed

5 files changed

+59
-34
lines changed

pylint_pytest/checkers/fixture.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,6 @@ def patch_add_message(self, msgid, line=None, node=None, args=None,
220220
'''
221221
- intercept and discard unwanted warning messages
222222
'''
223-
if not FixtureChecker.enable_plugin:
224-
FixtureChecker._original_add_message(
225-
self, msgid, line, node, args, confidence, col_offset
226-
)
227-
return
228223
# check W0611 unused-import
229224
if msgid == 'unused-import':
230225
# actual attribute name is not passed as arg so...dirty hack

tests/base_tester.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# for pylint 1.9
1111
from pylint.utils import PyLintASTWalker as ASTWalker
1212
from pylint.checkers import BaseChecker
13+
import pytest
1314

1415
import pylint_pytest.checkers.fixture
1516

@@ -56,14 +57,24 @@ def verify_messages(self, msg_count, msg_id=None):
5657
pprint(self.MESSAGES)
5758
assert matched_count == msg_count, f'expecting {msg_count}, actual {matched_count}'
5859

59-
def setup_method(self):
60+
@pytest.fixture(scope="function", autouse=True)
61+
def within(self, request, enable_plugin):
62+
try:
63+
request.instance._setup_method(enable_plugin)
64+
yield request.instance
65+
finally:
66+
request.instance._teardown_method(enable_plugin)
67+
68+
69+
def _setup_method(self, enable_plugin):
6070
self.linter = UnittestLinter()
61-
self.checker = self.CHECKER_CLASS(self.linter)
6271
self.impacted_checkers = []
6372

64-
for key, value in self.CONFIG.items():
65-
setattr(self.checker.config, key, value)
66-
self.checker.open()
73+
if enable_plugin:
74+
self.checker = self.CHECKER_CLASS(self.linter)
75+
for key, value in self.CONFIG.items():
76+
setattr(self.checker.config, key, value)
77+
self.checker.open()
6778

6879
for checker_class in self.IMPACTED_CHECKER_CLASSES:
6980
checker = checker_class(self.linter)
@@ -72,8 +83,9 @@ def setup_method(self):
7283
checker.open()
7384
self.impacted_checkers.append(checker)
7485

75-
def teardown_method(self):
76-
self.checker.close()
86+
def _teardown_method(self, enable_plugin):
87+
if enable_plugin:
88+
self.checker.close()
7789
for checker in self.impacted_checkers:
7890
checker.close()
7991

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pytest
2+
13
from base_tester import BasePytestTester
24
from pylint_pytest.checkers.fixture import FixtureChecker
35

@@ -6,14 +8,18 @@ class TestDeprecatedPytestFixtureScopeAsPositionalParam(BasePytestTester):
68
CHECKER_CLASS = FixtureChecker
79
MSG_ID = 'deprecated-positional-argument-for-pytest-fixture'
810

9-
def test_with_args_scope(self):
10-
self.run_linter(enable_plugin=True)
11+
@pytest.fixture
12+
def enable_plugin(self):
13+
return True
14+
15+
def test_with_args_scope(self, enable_plugin):
16+
self.run_linter(enable_plugin)
1117
self.verify_messages(1)
1218

13-
def test_with_kwargs_scope(self):
14-
self.run_linter(enable_plugin=True)
19+
def test_with_kwargs_scope(self, enable_plugin):
20+
self.run_linter(enable_plugin)
1521
self.verify_messages(0)
1622

17-
def test_without_scope(self):
18-
self.run_linter(enable_plugin=True)
23+
def test_without_scope(self, enable_plugin):
24+
self.run_linter(enable_plugin)
1925
self.verify_messages(0)
Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pytest
2+
13
from base_tester import BasePytestTester
24
from pylint_pytest.checkers.fixture import FixtureChecker
35

@@ -6,26 +8,30 @@ class TestPytestMarkUsefixtures(BasePytestTester):
68
CHECKER_CLASS = FixtureChecker
79
MSG_ID = 'useless-pytest-mark-decorator'
810

9-
def test_mark_usefixture_using_for_test(self):
10-
self.run_linter(enable_plugin=True)
11+
@pytest.fixture
12+
def enable_plugin(self):
13+
return True
14+
15+
def test_mark_usefixture_using_for_test(self, enable_plugin):
16+
self.run_linter(enable_plugin)
1117
self.verify_messages(0)
1218

13-
def test_mark_usefixture_using_for_class(self):
14-
self.run_linter(enable_plugin=True)
19+
def test_mark_usefixture_using_for_class(self, enable_plugin):
20+
self.run_linter(enable_plugin)
1521
self.verify_messages(0)
1622

17-
def test_mark_usefixture_using_for_fixture_attribute(self):
18-
self.run_linter(enable_plugin=True)
23+
def test_mark_usefixture_using_for_fixture_attribute(self, enable_plugin):
24+
self.run_linter(enable_plugin)
1925
self.verify_messages(2)
2026

21-
def test_mark_usefixture_using_for_fixture_function(self):
22-
self.run_linter(enable_plugin=True)
27+
def test_mark_usefixture_using_for_fixture_function(self, enable_plugin):
28+
self.run_linter(enable_plugin)
2329
self.verify_messages(2)
2430

25-
def test_other_marks_using_for_fixture(self):
26-
self.run_linter(enable_plugin=True)
31+
def test_other_marks_using_for_fixture(self, enable_plugin):
32+
self.run_linter(enable_plugin)
2733
self.verify_messages(4)
2834

29-
def test_not_pytest_marker(self):
30-
self.run_linter(enable_plugin=True)
35+
def test_not_pytest_marker(self, enable_plugin):
36+
self.run_linter(enable_plugin)
3137
self.verify_messages(0)

tests/test_pytest_yield_fixture.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pytest
2+
13
from base_tester import BasePytestTester
24
from pylint_pytest.checkers.fixture import FixtureChecker
35

@@ -7,10 +9,14 @@ class TestDeprecatedPytestYieldFixture(BasePytestTester):
79
IMPACTED_CHECKER_CLASSES = []
810
MSG_ID = 'deprecated-pytest-yield-fixture'
911

10-
def test_smoke(self):
11-
self.run_linter(enable_plugin=True)
12+
@pytest.fixture
13+
def enable_plugin(self):
14+
return True
15+
16+
def test_smoke(self, enable_plugin):
17+
self.run_linter(enable_plugin)
1218
self.verify_messages(1)
1319

14-
def test_func(self):
15-
self.run_linter(enable_plugin=True)
20+
def test_func(self, enable_plugin):
21+
self.run_linter(enable_plugin)
1622
self.verify_messages(2)

0 commit comments

Comments
 (0)