unit-test-scheduled-async
Test @Scheduled and @Async methods directly without waiting for actual execution.
Works with
0
total installs
0
this week
194
GitHub stars
0
upvotes
Install Skill
Run in your terminal
0
installs
0
this week
194
stars
What it does
Call async and scheduled methods directly in tests instead of relying on Spring's async executor or scheduling intervals
Use CompletableFuture.get() with explicit timeouts to wait for async results, and Awaitility.await() for polling-based assertions on state changes
Mock dependencies that async methods call, then verify interactions after completion using Mockito
Test exception handling by catching
Installation Guide
How to use unit-test-scheduled-async on Cursor
AI-first code editor with Composer
Prerequisites
Before installing skills in Cursor, ensure your development environment meets these requirements:
- ›Cursor installed and configured on your machine
- ›Node.js 16+ with npm — verify with
node --version - ›Active project directory where you want to add
unit-test-scheduled-async
Run the install command
Execute the skills CLI command in your project's root directory to begin installation:
Fetches unit-test-scheduled-async from giuseppe-trisciuoglio/developer-kit and configures it for Cursor.
Select Cursor when prompted
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Verify installation
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate unit-test-scheduled-async. Access via /unit-test-scheduled-async in your agent's command palette.
Security Notice
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Documentation
Unit Testing @Scheduled and @Async Methods
Overview
Patterns for unit testing Spring @Scheduled and @Async methods with JUnit 5. Test CompletableFuture results, use Awaitility for race conditions, mock scheduled task execution, and validate error handling — without waiting for real scheduling intervals.
When to Use
- Testing
@Scheduledmethod logic - Testing
@Asyncmethod behavior - Verifying
CompletableFutureresults - Testing async error handling
- Testing cron expression logic without waiting for actual scheduling
- Validating thread pool behavior and execution counts
- Testing background task logic in isolation
Instructions
- Call
@Asyncmethods directly — bypass Spring's async proxy; the annotation is irrelevant in unit tests - Mock dependencies with
@Mockand@InjectMocks(Mockito) - Wait for completion — use
CompletableFuture.get(timeout, unit)orawait().atMost(...).untilAsserted(...) - Call
@Scheduledmethods directly — do not wait for cron/fixedRate; the annotation is ignored in unit tests - Test exception paths — verify
ExecutionExceptionwrapping onCompletableFuture.get()
Validation checkpoints:
- After
CompletableFuture.get(), assert the returned value before verifying mock interactions - If
ExecutionExceptionis thrown, check.getCause()to identify the root exception - If Awaitility times out, increase
atMost()duration or reducepollInterval()until the condition is reachable - After multiple task invocations, assert execution counts before
verify()calls
Examples
Key patterns — complete examples in references/examples.md:
// @Async: call directly, wait with CompletableFuture.get(timeout, unit)
@Service
class EmailService {
@Async
public CompletableFuture<Boolean> sendEmailAsync(String to) {
return CompletableFuture.supplyAsync(() -> true);
}
}
@Test
void shouldReturnCompletedFuture() throws Exception {
EmailService service = new EmailService();
Boolean result = service.sendEmailAsync("[email protected]").get(5, TimeUnit.SECONDS);
assertThat(result).isTrue();
}
// @Scheduled: call directly, mock the repository
@Component
class DataRefreshTask {
@InjectMocks private DataRepository dataRepository;
@Scheduled(fixedDelay = 60000) public void refreshCache() { /* ... */ }
}
@Test
void shouldRefreshCache() {
when(dataRepository.findAll()).thenReturn(List.of(new Data(1L, "item1")));
dataRefreshTask.refreshCache();
verify(dataRepository).findAll();
}
// Awaitility: use for race conditions with shared mutable state
@Test
void shouldProcessAllItems() {
BackgroundWorker worker = new BackgroundWorker();
worker.processItems(List.of("item1", "item2", "item3"));
Awaitility.await()
.atMost(Duration.ofSeconds(5))
.pollInterval(Duration.ofMillis(100))
.untilAsserted(() -> assertThat(worker.getProcessedCount()).isEqualTo(3));
}
// Mocked dependencies with exception handling
@Test
void shouldHandleAsyncExceptionGracefully() {
doThrow(new RuntimeException("Email failed")).when(emailService).send(any());
CompletableFuture<String> result = service.notifyUserAsync("user123");
assertThatThrownBy(result::get)
.isInstanceOf(ExecutionException.class)
.hasCauseInstanceOf(RuntimeException.class);
}
Full Maven/Gradle dependencies, additional test classes, and execution count patterns: see references/examples.md.
Best Practices
- Always set a timeout on
CompletableFuture.get()to prevent hanging tests - Mock all dependencies — never call real external services in unit tests
- Use Awaitility only for race conditions; prefer direct calls for simple async methods
- Test
@Scheduledlogic directly — the annotation is ignored in unit tests - Assert values before verifying mock interactions; verify after async completion
Common Pitfalls
- Relying on Spring's async executor instead of calling methods directly
- Missing timeout on
CompletableFuture.get() - Forgetting to test exception propagation in async methods
- Not mocking dependencies that async methods invoke internally
- Waiting for actual cron/fixedRate timing instead of testing logic in isolation
Constraints and Warnings
@Asyncself-invocation: calling@Asyncfrom another method in the same class executes synchronously — the Spring proxy is bypassed- Thread pool ordering:
ThreadPoolTaskSchedulerdoes not guarantee execution order - CompletableFuture chaining: exceptions in intermediate stages can be silently lost — test each stage
- Awaitility timeout: always set a reasonable
atMost(); infinite waits hang the test suite - No actual scheduling:
@Scheduledis ignored in unit tests — call methods directly
References
- Spring
@AsyncDocumentation - Spring
@ScheduledDocumentation - Awaitility Testing Library
- CompletableFuture API
- Code examples:
references/examples.md
List & Monetize Your Skill
Submit your Claude Code skill and start earning
Use Cases
Task Automation & Efficiency
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Knowledge Enhancement
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Quality Improvement
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Implementation Guide
Prerequisites
- ›Claude Desktop or compatible AI client with skill support
- ›Clear understanding of task or problem to solve
- ›Willingness to iterate and refine outputs
Time Estimate
15-45 minutes depending on use case complexity
Steps
- 1Install skill using provided installation command
- 2Test with simple use case relevant to your work
- 3Evaluate output quality and relevance
- 4Iterate on prompts to improve results
- 5Integrate into regular workflow if valuable
Common Pitfalls
- ⚠Expecting perfect results without iteration
- ⚠Not providing enough context in prompts
- ⚠Using skill for tasks outside its intended scope
- ⚠Accepting outputs without review and validation
Best Practices
✓ Do
- +Start with clear, specific prompts
- +Provide relevant context and constraints
- +Review and refine all outputs before using
- +Iterate to improve output quality
- +Document successful prompt patterns
✗ Don't
- −Don't use without understanding skill limitations
- −Don't skip validation of outputs
- −Don't share sensitive information in prompts
- −Don't expect skill to replace human judgment
💡 Pro Tips
- ★Be specific about desired format and style
- ★Ask for multiple options to choose from
- ★Request explanations to understand reasoning
- ★Combine AI efficiency with human expertise
When to Use This
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
Learning Path
- 1Familiarize yourself with skill capabilities and limitations
- 2Start with low-risk, non-critical tasks
- 3Progress to more complex and valuable use cases
- 4Build expertise through regular use and experimentation
Related Skills
tailwind-css-patterns
16giuseppe-trisciuoglio/developer-kit
nextjs-code-review
8giuseppe-trisciuoglio/developer-kit
nestjs-best-practices
6giuseppe-trisciuoglio/developer-kit
drizzle-orm-patterns
6giuseppe-trisciuoglio/developer-kit
graalvm-native-image
4giuseppe-trisciuoglio/developer-kit
polyglot-test-agent
11github/awesome-copilot
Reviews
- CCamila Shah★★★★★Dec 24, 2024
unit-test-scheduled-async reduced setup friction for our internal harness; good balance of opinion and flexibility.
- SShikha Mishra★★★★★Dec 20, 2024
unit-test-scheduled-async is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- MMichael Perez★★★★★Dec 8, 2024
I recommend unit-test-scheduled-async for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- EEvelyn Dixit★★★★★Nov 27, 2024
Useful defaults in unit-test-scheduled-async — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- RRahul Santra★★★★★Nov 11, 2024
unit-test-scheduled-async fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- EEvelyn Menon★★★★★Oct 18, 2024
Registry listing for unit-test-scheduled-async matched our evaluation — installs cleanly and behaves as described in the markdown.
- PPratham Ware★★★★★Oct 2, 2024
unit-test-scheduled-async has been reliable in day-to-day use. Documentation quality is above average for community skills.
- DDiego Tandon★★★★★Sep 25, 2024
unit-test-scheduled-async fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- IIshan Gill★★★★★Sep 13, 2024
I recommend unit-test-scheduled-async for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- AAarav Robinson★★★★★Aug 16, 2024
unit-test-scheduled-async has been reliable in day-to-day use. Documentation quality is above average for community skills.
showing 1-10 of 28
Discussion
Comments — not star reviews- No comments yet — start the thread.