Agent skill
analyzing-unit-tests
Use when analyzing unit test coverage, patterns, and test code for isolated component testing
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/analyzing-unit-tests
SKILL.md
Analyzing Unit Tests
Output: docs/unwind/layers/unit-tests/ (folder with index.md + section files)
Principles: See analysis-principles.md - completeness, machine-readable, link to source, no commentary, incremental writes.
Output Structure
docs/unwind/layers/unit-tests/
├── index.md # Test summary, coverage overview
├── service-tests.md # Service layer tests
├── domain-tests.md # Domain/entity tests
├── utilities.md # Test utilities, factories
└── coverage-gaps.md # Classes without tests
For large codebases (50+ test files), split by domain:
docs/unwind/layers/unit-tests/
├── index.md
├── users-tests.md
├── orders-tests.md
└── ...
Process (Incremental Writes)
Step 1: Setup
mkdir -p docs/unwind/layers/unit-tests/
Write initial index.md:
# Unit Tests
## Sections
- [Service Tests](service-tests.md) - _pending_
- [Domain Tests](domain-tests.md) - _pending_
- [Test Utilities](utilities.md) - _pending_
- [Coverage Gaps](coverage-gaps.md) - _pending_
## Summary
_Analysis in progress..._
Step 2: Analyze and write service-tests.md
- Find all service layer tests
- Include actual test code showing what is tested
- Write
service-tests.mdimmediately - Update
index.md
Step 3: Analyze and write domain-tests.md
- Find all domain/entity tests
- Write
domain-tests.mdimmediately - Update
index.md
Step 4: Analyze and write utilities.md
- Find test utilities, factories, mocks
- Write
utilities.mdimmediately - Update
index.md
Step 5: Analyze and write coverage-gaps.md
- Identify classes without tests
- Write
coverage-gaps.mdimmediately - Update
index.md
Step 6: Finalize index.md Add coverage summary table
Output Format
# Unit Tests
## Configuration
[pom.xml test dependencies](https://github.com/owner/repo/blob/main/pom.xml#L50-L70)
```xml
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.0.0</version>
<scope>test</scope>
</dependency>
Test Summary
| Layer | Classes | Tested | Coverage |
|---|---|---|---|
| Service | 12 | 10 | 83% |
| Domain | 8 | 8 | 100% |
| Repository | 6 | 4 | 67% |
Service Tests
UserServiceTest
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@Mock
private PasswordEncoder passwordEncoder;
@InjectMocks
private UserService userService;
@Test
void createUser_success() {
CreateUserRequest request = new CreateUserRequest("[email protected]", "password", "Test");
when(userRepository.existsByEmail(request.email())).thenReturn(false);
when(passwordEncoder.encode(request.password())).thenReturn("encoded");
when(userRepository.save(any())).thenAnswer(inv -> inv.getArgument(0));
User result = userService.createUser(request);
assertThat(result.getEmail()).isEqualTo("[email protected]");
verify(userRepository).save(any());
}
@Test
void createUser_duplicateEmail_throws() {
CreateUserRequest request = new CreateUserRequest("[email protected]", "password", "Test");
when(userRepository.existsByEmail(request.email())).thenReturn(true);
assertThrows(DuplicateEmailException.class, () -> userService.createUser(request));
}
}
Tests: createUser_success, createUser_duplicateEmail_throws, getUser_success, getUser_notFound_throws
[Continue for ALL test classes...]
Domain Tests
UserTest
class UserTest {
@Test
void suspend_activeUser_setsSuspended() {
User user = new User("[email protected]", "hash");
user.setStatus(UserStatus.ACTIVE);
user.suspend();
assertThat(user.getStatus()).isEqualTo(UserStatus.SUSPENDED);
}
@Test
void suspend_deletedUser_throws() {
User user = new User("[email protected]", "hash");
user.setStatus(UserStatus.DELETED);
assertThrows(IllegalStateException.class, () -> user.suspend());
}
}
Test Utilities
TestDataFactory
public class TestDataFactory {
public static User createUser() {
return new User("[email protected]", "encodedPassword");
}
public static Order createOrder(User user) {
Order order = new Order(user);
order.addItem(createProduct(), 2);
return order;
}
}
Coverage Gaps
Classes without unit tests:
PaymentServiceNotificationServiceLegacyOrderAdapter
Unknowns
- [List anything unclear]
## Refresh Mode
If `docs/unwind/layers/unit-tests/` exists, compare current state and add `## Changes Since Last Review` section to `index.md`.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?