Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use tearDown() to run code after each test method that fails or raises an error, provided setUp() completed. To run code once after the entire test suite, run the suite from Python and inspect the TestResult returned by the runner. For a shell or CI follow-up, run a separate command after unit2 and preserve the test process’s exit status.

Choose when the follow-up should run

Need Use Important behavior
After every test method tearDown() Runs after the test outcome is recorded if setup completed, including after a failure or unexpected exception.
Cleanup even if setup fails Register a cleanup callback with addCleanup() as soon as the resource is created Availability depends on the installed unittest2 version. Current Python documentation says cleanups run after teardown, in last-in-first-out order, and still run if setup fails.
Once after all tests Run the suite with a runner and inspect its returned result Lets the driver decide whether to produce a report or take another suite-level action.
After the test process exits Sequence commands in a shell or CI job Preserve the test command’s exit status so a follow-up command does not hide a failed test run.

Run code after each failed test

Define tearDown(self) on the relevant TestCase. It is called after the test method’s outcome has been recorded, whether that method passed, failed an assertion, or raised an unexpected exception, as long as setUp() completed successfully. It runs once per test instance; it is not a hook for the end of the whole suite.

import unittest2

class ExampleTest(unittest2.TestCase):
    def setUp(self):
        self.resource = open_resource()

    def test_something(self):
        self.assertTrue(check_resource(self.resource))

    def tearDown(self):
        # Runs after the test outcome is recorded, if setUp succeeded.
        save_per_test_diagnostics()
        close_resource(self.resource)

Teardown is not conditional on failure in this example: it runs after successful tests too. If the follow-up should happen only after failure, check the appropriate result state supported by the installed runtime; do not assume a modern API exists in every legacy unittest2 installation. A teardown exception may be recorded as an additional error, making the original test failure harder to diagnose. Keep diagnostics and cleanup defensive, and avoid allowing a secondary exception to mask useful information.

Ensure cleanup runs when setup fails

tearDown() is not called when setUp() fails. For a resource that must be released even in that case, register a cleanup callback immediately after acquiring it. Verify that the installed unittest2 release supports the API you use.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
import unittest2

class ResourceTest(unittest2.TestCase):
    def setUp(self):
        self.resource = open_resource()
        self.addCleanup(self.resource.close)

    def test_resource(self):
        self.assertTrue(check_resource(self.resource))

Current Python documentation describes cleanup callbacks as running after teardown in last-in-first-out order and running even when setup fails. That behavior should not be assumed for an old unittest2 package without checking its supported API.

Run code once after the full suite

Use a driver script when your follow-up needs the outcome of the complete suite. The runner’s run() method returns a result object; inspect failures for assertion or explicit test failures and errors for unexpected exceptions.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
import unittest2

suite = unittest2.TestLoader().discover("tests")
result = unittest2.TextTestRunner(verbosity=2).run(suite)

if result.failures or result.errors:
    run_failure_report(result)

if not result.wasSuccessful():
    raise SystemExit(1)

Discovery and runner methods should be checked against the installed unittest2 release. The final exit code in this example keeps the driver’s process status unsuccessful when the suite has failures or errors; adjust the report routine to your application without swallowing that status.

Run a shell or CI follow-up

The unittest2 project documents the unit2 command-line script, including unit2 discover and unit2 -v test_module. A shell or CI sequence is appropriate when the follow-up does not need to inspect individual result objects. Use shell failure handling deliberately: a later successful command can otherwise become the job’s final status even when tests failed.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
unit2 discover
status=$?

if [ "$status" -ne 0 ]; then
    python report_failure.py
fi

exit "$status"

This example records the test command’s status, runs reporting only on failure, and exits with the original status. Adapt the command and shell syntax to the CI environment in use.

Check unittest2 and Python compatibility

unittest2 is a backport of unittest features, and its available APIs depend on the package and Python version installed. Its project page documents unit2 and notes that Python 2.7 can use python -m unittest; it also warns about compatibility limits when mixing unittest2 infrastructure with standard-library loaders, runners, or result objects. Prefer a consistent set of test, loader, runner, and result classes.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

Current Python documentation is useful for understanding behavior, but its newer APIs are not automatically available in a legacy unittest2 environment. For example, Python 3.14 documentation includes APIs with later version introductions, such as enterContext() and addClassCleanup(). Check the installed versions and the API’s version annotation before copying examples from current documentation.

Troubleshoot common problems

  • My teardown did not run. Check whether setUp() completed. If setup failed, teardown is not called; register cleanup immediately after creating each resource, if supported by your unittest2 version.
  • The follow-up ran after passing tests too. That is expected: tearDown() runs after every test whose setup succeeded. Put suite-level or failure-only behavior in a driver that inspects the returned result.
  • The original failure is now hard to find. A teardown exception can add an error to the result. Make teardown steps resilient and ensure reporting preserves the original test outcome.
  • A modern example raises an attribute error. The API may not exist in the installed Python or unittest2 version. Check package/runtime versions and use the package’s compatible API rather than assuming current standard-library documentation applies.
  • The CI job reports success despite failed tests. Ensure the final job status reflects the test command’s exit status, even if a reporting command runs afterward.
  • Mixing loaders or runners causes confusing result behavior. Use unittest2’s own compatible test infrastructure rather than combining it casually with standard-library components; the package documents compatibility limitations.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your follow-up task is capturing a webpage for a failure report, ScreenshotNeo offers a one-request screenshot API. It accepts a URL and returns an image or PDF; its documented cleanup can accept consent banners and remove known consent platforms, newsletter popups, and chat widgets before capture.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo API documentation for request options. ScreenshotNeo says bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses include X-Page-Verdict and X-Billed headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots.

Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

Sign up for ScreenshotNeo’s free plan.

Sources

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.