test_unittest.py


Overview

`test_unittest.py` is a comprehensive test suite designed to verify the integration and functionality of Python's built-in `unittest` framework within the pytest testing environment. It leverages `pytest`'s own testing utilities (`Pytester`, `MonkeyPatch`) to programmatically generate, run, and assert behaviors of various `unittest.TestCase` scenarios.

The file ensures:

This file is essential for ensuring that pytest's unittest support remains stable, compatible, and feature-complete.


Detailed Descriptions

Key Imports


Functions

Each function is a test case validating a particular aspect of unittest integration.


test_simple_unittest(pytester: Pytester) -> None


test_runTest_method(pytester: Pytester) -> None


test_isclasscheck_issue53(pytester: Pytester) -> None


test_setup(pytester: Pytester) -> None


test_setUpModule(pytester: Pytester) -> None


test_new_instances(pytester: Pytester) -> None


test_function_item_obj_is_instance(pytester: Pytester) -> None


test_teardown(pytester: Pytester) -> None


test_teardown_issue1649(pytester: Pytester) -> None


test_unittest_skip_issue148(pytester: Pytester) -> None


test_method_and_teardown_failing_reporting(pytester: Pytester) -> None


test_setup_failure_is_shown(pytester: Pytester) -> None


test_setup_setUpClass(pytester: Pytester) -> None


test_fixtures_setup_setUpClass_issue8394(pytester: Pytester) -> None


test_setup_class(pytester: Pytester) -> None


test_testcase_adderrorandfailure_defers(pytester: Pytester, type: str) -> None


test_testcase_custom_exception_info(pytester: Pytester, type: str) -> None


test_testcase_totally_incompatible_exception_info(pytester: Pytester) -> None


test_module_level_pytestmark(pytester: Pytester) -> None


TestTrialUnittest (class)


test_djangolike_testcase(pytester: Pytester) -> None


test_unittest_not_shown_in_traceback(pytester: Pytester) -> None


test_unorderable_types(pytester: Pytester) -> None


test_unittest_typerror_traceback(pytester: Pytester) -> None


test_unittest_expected_failure_for_failing_test_is_xfail(pytester: Pytester, runner) -> None


test_unittest_expected_failure_for_passing_test_is_fail(pytester: Pytester, runner) -> None


test_unittest_setup_interaction(pytester: Pytester, stmt: str) -> None


test_non_unittest_no_setupclass_support(pytester: Pytester) -> None


test_no_teardown_if_setupclass_failed(pytester: Pytester) -> None


test_cleanup_functions(pytester: Pytester) -> None


test_issue333_result_clearing(pytester: Pytester) -> None


test_unittest_raise_skip_issue748(pytester: Pytester) -> None


test_unittest_skip_issue1169(pytester: Pytester) -> None


test_class_method_containing_test_issue1558(pytester: Pytester) -> None


test_usefixtures_marker_on_unittest(base, pytester: Pytester) -> None


test_testcase_handles_init_exceptions(pytester: Pytester) -> None


test_error_message_with_parametrized_fixtures(pytester: Pytester) -> None


test_setup_inheritance_skipping(pytester: Pytester, test_name, expected_outcome) -> None


test_BdbQuit(pytester: Pytester) -> None


test_exit_outcome(pytester: Pytester) -> None


test_trace(pytester: Pytester, monkeypatch: MonkeyPatch) -> None


test_pdb_teardown_called(pytester: Pytester, monkeypatch: MonkeyPatch) -> None


test_pdb_teardown_skipped_for_functions(pytester: Pytester, monkeypatch: MonkeyPatch, mark: str) -> None


test_pdb_teardown_skipped_for_classes(pytester: Pytester, monkeypatch: MonkeyPatch, mark: str) -> None


test_async_support(pytester: Pytester) -> None


test_asynctest_support(pytester: Pytester) -> None


test_plain_unittest_does_not_support_async(pytester: Pytester) -> None


Cleanup Tests (test_do_class_cleanups_on_success, test_do_class_cleanups_on_setupclass_failure, test_do_class_cleanups_on_teardownclass_failure, test_do_cleanups_on_success, test_do_cleanups_on_setup_failure, test_do_cleanups_on_teardown_failure)


TestClassCleanupErrors (class)


test_traceback_pruning(pytester: Pytester) -> None


test_raising_unittest_skiptest_during_collection(pytester: Pytester) -> None


test_abstract_testcase_is_not_collected(pytester: Pytester) -> None


Important Implementation Details


Interaction with System Components


Usage Examples

def test_simple_unittest_example(pytester):
    # Create a unittest file with one passing and one failing test
    test_file = pytester.makepyfile("""
        import unittest
        class TestExample(unittest.TestCase):
            def test_pass(self):
                self.assertEqual(1, 1)
            def test_fail(self):
                self.assertEqual(1, 0)
    """)
    # Run tests inline
    reports = pytester.inline_run(test_file)
    # Assert pass/fail outcomes
    assert reports.matchreport("test_pass").passed
    assert reports.matchreport("test_fail").failed

Visual Diagram: Class and Function Structure

classDiagram
    class TestTrialUnittest {
        +setup_class(cls)
        +test_trial_testcase_runtest_not_collected(pytester)
        +test_trial_exceptions_with_skips(pytester)
        +test_trial_error(pytester)
        +test_trial_pdb(pytester)
        +test_trial_testcase_skip_property(pytester)
        +test_trial_testfunction_skip_property(pytester)
        +test_trial_testcase_todo_property(pytester)
        +test_trial_testfunction_todo_property(pytester)
    }

    class TestClassCleanupErrors {
        +test_class_cleanups_failure_in_setup(pytester)
        +test_class_cleanups_failure_in_teardown(pytester)
        +test_class_cleanup_1_failure_in_teardown(pytester)
    }

    %% Functions outside classes
    class Functions {
        +test_simple_unittest(pytester)
        +test_runTest_method(pytester)
        +test_isclasscheck_issue53(pytester)
        +test_setup(pytester)
        +test_setUpModule(pytester)
        +test_new_instances(pytester)
        +test_function_item_obj_is_instance(pytester)
        +test_teardown(pytester)
        +test_teardown_issue1649(pytester)
        +test_unittest_skip_issue148(pytester)
        +test_method_and_teardown_failing_reporting(pytester)
        +test_setup_failure_is_shown(pytester)
        +test_setup_setUpClass(pytester)
        +test_fixtures_setup_setUpClass_issue8394(pytester)
        +test_setup_class(pytester)
        +test_testcase_adderrorandfailure_defers(pytester, type)
        +test_testcase_custom_exception_info(pytester, type)
        +test_testcase_totally_incompatible_exception_info(pytester)
        +test_module_level_pytestmark(pytester)
        +test_djangolike_testcase(pytester)
        +test_unittest_not_shown_in_traceback(pytester)
        +test_unorderable_types(pytester)
        +test_unittest_typerror_traceback(pytester)
        +test_unittest_expected_failure_for_failing_test_is_xfail(pytester, runner)
        +test_unittest_expected_failure_for_passing_test_is_fail(pytester, runner)
        +test_unittest_setup_interaction(pytester, stmt)
        +test_non_unittest_no_setupclass_support(pytester)
        +test_no_teardown_if_setupclass_failed(pytester)
        +test_cleanup_functions(pytester)
        +test_issue333_result_clearing(pytester)
        +test_unittest_raise_skip_issue748(pytester)
        +test_unittest_skip_issue1169(pytester)
        +test_class_method_containing_test_issue1558(pytester)
        +test_usefixtures_marker_on_unittest(base, pytester)
        +test_testcase_handles_init_exceptions(pytester)
        +test_error_message_with_parametrized_fixtures(pytester)
        +test_setup_inheritance_skipping(pytester, test_name, expected_outcome)
        +