code: def test_unhandled_thread_exception_in_setup(
      pytester: Pytester,
  ) -> None:
      pytester.makepyfile(
          test_it="""
          import threading
          import pytest
  
          @pytest.fixture
          def threadexc():
              def oops():
                  raise ValueError("Oops")
              t = threading.Thread(target=oops, name="MyThread")
              t.start()
              t.join()
  
          def test_it(threadexc): pass
          def test_2(): pass
          """
      )
      result = pytester.runpytest()
      assert result.ret == 0
      assert result.parseoutcomes() == {"passed": 2, "warnings": 1}
      result.stdout.fnmatch_lines(
          [
              "*= warnings summary =*",
              "test_it.py::test_it",
              "  * PytestUnhandledThreadExceptionWarning: Exception in thread MyThread",
              "  ",
              "  Traceback (most recent call last):",
              "  ValueError: Oops",
              "  ",
              "    warnings.warn(pytest.PytestUnhandledThreadExceptionWarning(msg))",
          ]
      )
  
imports: import pytest
  from _pytest.pytester import Pytester
label_desc: Use image node_id 2 for calling a global function with example usage: test_unhandled_thread_exception_in_setup(pytester) without return types