diff --git a/nose2/plugins/loader/functions.py b/nose2/plugins/loader/functions.py
index d7b6563..3e7aa95 100644
--- a/nose2/plugins/loader/functions.py
+++ b/nose2/plugins/loader/functions.py
@@ -140,6 +140,14 @@ class Functions(Plugin):
             return tests
         else:
             case = util.transplant_class(
-                unittest.FunctionTestCase, obj.__module__)(obj, **args)
+                FunctionTestCase, obj.__module__)(obj, **args)
             tests.append(case)
         return tests
+
+
+class FunctionTestCase(unittest.FunctionTestCase):
+
+    def __repr__(self):
+        return '%s.%s' % (self._testFunc.__module__, self._testFunc.__name__)
+
+    id = __str__ = __repr__

Test functions string repr contains 'transplant_class.<locals>.C'
The internal `transplant_class` becomes visible when running test functions with nose2 -v.
diff --git a/nose2/tests/functional/test_loading.py b/nose2/tests/functional/test_loading.py
index 1485544..19e37b7 100644
--- a/nose2/tests/functional/test_loading.py
+++ b/nose2/tests/functional/test_loading.py
@@ -82,6 +82,15 @@ class TestLoadTestsFromPackage(FunctionalTestCase):
             proc, stderr='OK')
         self.assertEqual(proc.poll(), 0)
 
+    def test_function_string_repr(self):
+        proc = self.runIn(
+            'scenario/tests_in_package',
+            '-v',
+            'pkg1.test.test_things.test_func')
+        self.assertTestRunOutputMatches(
+            proc, stderr='pkg1.test.test_things.test_func \.\.\. ok')
+        self.assertEqual(proc.poll(), 0)
+
     def test_generator_function_name(self):
         proc = self.runIn(
             'scenario/tests_in_package',

pip install -e .[dev]
parse_log_pytest
requirements.txt
nose2 pytest
3.6
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
coverage==6.2
importlib-metadata==4.8.3
iniconfig==1.1.1
-e git+https://github.com/nose-devs/nose2.git@049afb837852881460c18c81d32008c8fdef025b#egg=nose2
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0

name: nose2
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - coverage==6.2
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/nose2

nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_function_string_repr
nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_function_name nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_generator_function_index nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_generator_function_index_1_based nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_generator_function_name nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_generator_method nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_generator_method_index nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_module_name nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_module_name_with_start_dir nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_package_name nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_package_name_with_start_dir nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_parameterized_func nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_parameterized_func_index nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_parameterized_method nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_parameterized_method_index nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_project_directory_inside_package nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_start_directory_inside_package nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_testcase_method nose2/tests/functional/test_loading.py::TestLoadTestsFromPackage::test_testcase_name nose2/tests/functional/test_loading.py::TestLoadTestsOutsideOfPackage::test_function_name nose2/tests/functional/test_loading.py::TestLoadTestsOutsideOfPackage::test_module_name nose2/tests/functional/test_loading.py::TestLoadTestsOutsideOfPackage::test_module_name_with_start_dir nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_func nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_module nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_module_in_package nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_package nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_testcase nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_testcase_method nose2/tests/functional/test_loading.py::TestLoadingErrors::test_import_error_unknown_module_in_package nose2/tests/functional/test_loading.py::TestTestClassLoading::test_class_level_fixtures_supported nose2/tests/functional/test_loading.py::TestTestClassLoading::test_error_in_test_class nose2/tests/functional/test_loading.py::TestTestClassLoading::test_expected_failures nose2/tests/functional/test_loading.py::TestTestClassLoading::test_load_testclass_by_name nose2/tests/functional/test_loading.py::TestTestClassLoading::test_load_testclass_generator_method_by_name nose2/tests/functional/test_loading.py::TestTestClassLoading::test_load_testclass_method_by_name nose2/tests/functional/test_loading.py::TestTestClassLoading::test_load_testclass_params_method_by_name
nose2/plugins/loader/functions.py
nose2/plugins/loader/functions.py