Meaning
Replaces a method on a class with a mock that raises a specified exception when called. This addresses the need to test error handling paths and resilience to failures in dependent components. It is triggered when a test needs to verify behavior under failure conditions without altering the source code of the dependency.
Primary Function
Testing
Communicative Purpose
Enables testing of error handling by forcing a dependency to raise an exception.
Pattern
with patch.object(target_class, method_name, side_effect=exception_type):
Core Structure
with patch.object(..., ..., side_effect=...):
Função primária
Testing
Propósito comunicativo
Enables testing of error handling by forcing a dependency to raise an exception.
Situações de gatilho
Unit testing: verifying exception handling in calling code; Integration testing: simulating database or network failures; Refactoring: ensuring fallback logic works when a service method fails.
Contextos
Python unittest, pytest, mock-heavy test suites, Django/Flask testing.
Padrão
with patch.object(target_class, method_name, side_effect=exception_type):
Estrutura central
with patch.object(..., ..., side_effect=...):
Slots de substituição
target_class: class to patch, method_name: str name of method, exception_type: Exception class or instance
Colocados típicos
- unittest.mock
- MagicMock
- pytest.raises
- assertRaises
Substituições comuns
- patch.object with return_value (does not raise exception)
- monkeypatch.setattr (pytest)
- raising exception manually inside test body
Erros comuns
Patching an instance instead of a class (patching the object rather than the class method), Forgetting the side_effect keyword and passing the exception as a positional argument (which sets return_value), Using an Exception class that requires arguments without providing them instead of passing an exception instance
Similar / contraste
patch (patches by string path, not class reference), patch.dict (patches dictionaries), MagicMock.side_effect (setting side effect on an already created mock)
Interferências
Coming from JavaScript: may try to pass a function returning an exception instead of the exception class itself — Python's side_effect takes an Exception class or instance to raise.
Família do chunk
- patch
- patch.object
- MagicMock
- side_effect
- pytest.raises
Nuance
1. Do not use this if you just want the method to return a falsy value or None; use return_value instead. 2. Using side_effect with exceptions can slow down tests slightly due to exception handling overhead, but this is negligible for most test suites. 3. If patching an instance method, patch on the class, not the instance, to affect all instances or ensure the mock is applied correctly.
Efeito pragmático
Ensures error handling code is executed and verified in tests, preventing unhandled exceptions in production.
Dica de memória
Like wiring a fault button into a dependency: press it (call the method) and it immediately throws an error.
Nota
When side_effect is an Exception class, it is called with no arguments to raise. If the exception requires arguments, pass an instance (e.g., ValueError('msg')).
Upgrade path
Using side_effect with a callable for dynamic exception logic, or combining with pytest.raises for full exception flow testing.
Log in to save chunks.