Skills-4-SE mocking-test-generator
Generate unit tests with proper mocking for Python (unittest.mock/pytest) or Java (Mockito/JUnit) code. Use when users request test generation, unit tests with mocks, or testing code that has external dependencies like database calls, API requests, file I/O, or network operations. Automatically identifies dependencies to mock and creates executable, maintainable test code.
git clone https://github.com/ArabelaTso/Skills-4-SE
T=$(mktemp -d) && git clone --depth=1 https://github.com/ArabelaTso/Skills-4-SE "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/mocking-test-generator" ~/.claude/skills/arabelatso-skills-4-se-mocking-test-generator && rm -rf "$T"
skills/mocking-test-generator/SKILL.mdMocking Test Generator
Generate unit tests with proper mocking of external dependencies for Python and Java code.
Workflow
- Analyze the code - Identify external dependencies, side effects, and testable units
- Select framework - Determine Python (unittest.mock/pytest) or Java (Mockito/JUnit)
- Generate mocks - Create mock objects for external dependencies
- Write tests - Generate executable test code with assertions
- Add documentation - Include clear comments explaining mocks and test logic
Step 1: Analyze the Code
Read the target code to identify:
- External dependencies: API clients, database connections, third-party libraries
- I/O operations: File reads/writes, network requests, system calls
- Side effects: Email sending, logging, state modifications
- Testable units: Functions, methods, or classes to test in isolation
Ask clarifying questions if:
- Multiple functions/classes exist (which to test?)
- Testing scope is unclear (unit vs integration?)
- Mock behavior needs specification (return values, exceptions?)
Step 2: Select Framework
Python: Use
unittest.mock with pytest or unittest
- Prefer
decorator for external calls@patch - Use
objects for complex dependenciesMock() - Apply
for reusable mockspytest.fixture
Java: Use Mockito with JUnit 5
- Use
annotation for dependencies@Mock - Apply
to test class@ExtendWith(MockitoExtension.class) - Use
for stubbingwhen().thenReturn()
Step 3: Generate Mocks
Identify what to mock:
Always mock:
- External API calls (HTTP requests, REST clients)
- Database connections and queries
- File system operations
- Network I/O
- Time/date functions
- Random number generators
- Environment variables
Never mock (unless explicitly requested):
- Internal business logic
- Pure functions
- Data structures
- Simple utilities
For common patterns, reference:
- Python: See references/python_patterns.md
- Java: See references/java_patterns.md
Step 4: Write Tests
Generate test code that:
- Imports - Include necessary testing and mocking libraries
- Setup - Initialize mocks and test fixtures
- Execution - Call the function/method under test
- Assertions - Verify expected behavior and outputs
- Verification - Confirm mocks were called correctly
Test structure:
# Python example from unittest.mock import patch, Mock import pytest @patch('module.external_dependency') def test_function_name(mock_dependency): # Arrange: Setup mock behavior mock_dependency.return_value = expected_value # Act: Execute function under test result = function_under_test(input_data) # Assert: Verify results assert result == expected_output mock_dependency.assert_called_once_with(expected_args)
// Java example @ExtendWith(MockitoExtension.class) class ServiceTest { @Mock private ExternalDependency dependency; @Test void testMethodName() { // Arrange: Setup mock behavior when(dependency.method()).thenReturn(expectedValue); // Act: Execute method under test Service service = new Service(dependency); String result = service.methodUnderTest(); // Assert: Verify results assertEquals(expectedOutput, result); verify(dependency).method(); } }
Include:
- Multiple test cases for different scenarios (happy path, edge cases, errors)
- Descriptive test names that explain what is being tested
- Setup/teardown if needed for test isolation
Step 5: Add Documentation
Include comments that explain:
- What external dependency is being mocked and why
- What behavior the mock simulates
- What the test verifies
Keep comments concise and focused on non-obvious aspects.
Output Format
Provide:
- Complete test file - Fully executable with all imports
- Test class/module - Properly structured for the framework
- Multiple test methods - Cover main scenarios
- Clear naming - Descriptive test and variable names
Do not:
- Modify the original code under test
- Mock internal logic unless explicitly requested
- Generate incomplete or pseudo-code tests
Example Usage
User request: "Generate unit tests for this Python function that calls an external API"
Response:
- Read the function code
- Identify the API call to mock
- Generate pytest test file with
decorator@patch - Include tests for success case, error handling, and edge cases
- Add comments explaining the mock setup
Framework-Specific Notes
Python (pytest):
- Use
for reusable mock setups@pytest.fixture - Apply
as decorator or context manager@patch - Use
for file operationsmock_open - Apply
for environment variables@patch.dict
Python (unittest):
- Use
base classunittest.TestCase - Apply
decorator or@patch
context managerpatch() - Use
andsetUp()
methodstearDown() - Call
methodsself.assert*
Java (Mockito + JUnit 5):
- Use
on test class@ExtendWith(MockitoExtension.class) - Apply
for dependencies@Mock - Use
for setup,@BeforeEach
for teardown@AfterEach - Apply
to verify complex argumentsArgumentCaptor - Use
for static method mocking (Mockito 3.4+)MockedStatic
Common Patterns
Reference files contain detailed examples for:
Python (references/python_patterns.md):
- External API calls
- Database operations
- File system operations
- Environment variables
- Time-dependent code
- Exception handling
Java (references/java_patterns.md):
- External API calls
- Database operations
- File system operations
- Void methods
- Exception handling
- Argument captors
- Static method mocking
- Constructor mocking