<<<<<<< SEARCH
    def setup(self) -> None:
        # A bound method to be called during teardown() if set (see 'runtest()').
        self._explicit_tearDown: Optional[Callable[[], None]] = None
        assert self.parent is not None
        self._testcase = self.parent.obj(self.name)  # type: ignore[attr-defined]
        self._obj = getattr(self._testcase, self.name)
        if hasattr(self, "_request"):
            self._request._fillfixtures()
=======
    def setup(self) -> None:
        # A bound method to be called during teardown() if set (see 'runtest()').
        self._explicit_tearDown: Optional[Callable[[], None]] = None
        assert self.parent is not None
        self._testcase = self.parent.obj(self.name)  # type: ignore[attr-defined]
        self._obj = getattr(self._testcase, self.name)
        self._skipped_by_unittest = bool(
            getattr(self._testcase, "__unittest_skip__", False)
            or getattr(self._obj, "__unittest_skip__", False)
        )
        if hasattr(self, "_request"):
            self._request._fillfixtures()
>>>>>>> REPLACE
<<<<<<< SEARCH
    def teardown(self) -> None:
        if self._explicit_tearDown is not None:
            self._explicit_tearDown()
            self._explicit_tearDown = None
        self._testcase = None
        self._obj = None
=======
    def teardown(self) -> None:
        if self._explicit_tearDown is not None and not getattr(
            self, "_skipped_by_unittest", False
        ):
            self._explicit_tearDown()
            self._explicit_tearDown = None
        self._testcase = None
        self._obj = None
>>>>>>> REPLACE