Skip & SkipIf Decorators
Skip decorators allow you to conditionally skip tests that shouldn't run in certain environments, with certain configurations, or while features are under development.
@unittest.skip
import unittest
import sys
class TestSkips(unittest.TestCase):
@unittest.skip("Not implemented yet")
def test_future_feature(self):
pass
@unittest.skip("Known bug #1234")
def test_known_bug(self):
pass
@unittest.skip(reason="Requires database connection")
def test_db_operation(self):
pass
@unittest.skipIf / @unittest.skipUnless
class TestPlatform(unittest.TestCase):
@unittest.skipIf(sys.platform == "win32", "Not supported on Windows")
def test_unix_only(self):
import os
self.assertTrue(hasattr(os, 'fork'))
@unittest.skipUnless(sys.platform.startswith("linux"), "Linux only")
def test_linux_feature(self):
pass
@unittest.skipIf(
not HAS_GPU,
"GPU not available"
)
def test_gpu_computation(self):
pass
Practical Examples
import os
import unittest
class TestEnvironment(unittest.TestCase):
@unittest.skipUnless(
os.getenv("API_KEY"),
"API_KEY environment variable not set"
)
def test_api_call(self):
import requests
response = requests.get("https://api.example.com/data")
self.assertEqual(response.status_code, 200)
@unittest.skipIf(
os.getenv("CI") == "true",
"Flaky test, skip in CI"
)
def test_network_operation(self):
pass
Key Takeaway
Use @unittest.skip for unconditional skips, @unittest.skipIf
to skip when a condition is true, and @unittest.skipUnless to skip when
a condition is false.