summaryrefslogtreecommitdiff
path: root/src/_pytest/nose.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/_pytest/nose.py')
-rw-r--r--src/_pytest/nose.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/_pytest/nose.py b/src/_pytest/nose.py
index bb8f99772..de91af85a 100644
--- a/src/_pytest/nose.py
+++ b/src/_pytest/nose.py
@@ -2,11 +2,12 @@
from _pytest import python
from _pytest import unittest
from _pytest.config import hookimpl
+from _pytest.fixtures import getfixturemarker
from _pytest.nodes import Item
@hookimpl(trylast=True)
-def pytest_runtest_setup(item):
+def pytest_runtest_setup(item) -> None:
if is_potential_nosetest(item):
if not call_optional(item.obj, "setup"):
# Call module level setup if there is no object level one.
@@ -15,7 +16,7 @@ def pytest_runtest_setup(item):
item.session._setupstate.addfinalizer((lambda: teardown_nose(item)), item)
-def teardown_nose(item):
+def teardown_nose(item) -> None:
if is_potential_nosetest(item):
if not call_optional(item.obj, "teardown"):
call_optional(item.parent.obj, "teardown")
@@ -29,11 +30,16 @@ def is_potential_nosetest(item: Item) -> bool:
)
-def call_optional(obj, name):
+def call_optional(obj: object, name: str) -> bool:
method = getattr(obj, name, None)
- isfixture = hasattr(method, "_pytestfixturefunction")
- if method is not None and not isfixture and callable(method):
- # If there's any problems allow the exception to raise rather than
- # silently ignoring them.
- method()
- return True
+ if method is None:
+ return False
+ is_fixture = getfixturemarker(method) is not None
+ if is_fixture:
+ return False
+ if not callable(method):
+ return False
+ # If there are any problems allow the exception to raise rather than
+ # silently ignoring it.
+ method()
+ return True