spring-boot-starter-actor icon indicating copy to clipboard operation
spring-boot-starter-actor copied to clipboard

Implement testing utilities foundation for Spring Boot Actor

Open Copilot opened this issue 2 months ago • 0 comments

Description

Implements Spring Boot-friendly testing infrastructure by wrapping Pekko TestKit. Provides @EnableActorTesting annotation, SpringActorTestKit, and ActorTestProbe for simplified actor testing in Spring Boot contexts.

Changes Made

Core Testing Infrastructure

  • @EnableActorTesting - Annotation for test auto-configuration
  • SpringActorTestKit - Wraps Pekko ActorTestKit with Spring-friendly spawn/probe APIs
  • ActorTestProbe - Wraps Pekko TestProbe with assertion helpers (receiveMessage(), expectMessageClass(), expectMessageThat())
  • ActorTestConfiguration - Bean auto-configuration and lifecycle management

Example Usage

@SpringBootTest
@EnableActorTesting
public class OrderActorTest {
    @Autowired
    private SpringActorTestKit testKit;
    
    @Test
    public void testOrderCreation() {
        ActorTestProbe<OrderEvent> probe = testKit.createProbe();
        ActorRef<Command> actor = testKit.spawn(createBehavior(), "order");
        
        actor.tell(new CreateOrder("order-1", 100.0, probe.ref()));
        
        probe.expectMessageThat(OrderCreated.class, created -> {
            assertEquals("order-1", created.orderId());
            assertEquals(100.0, created.amount());
        });
    }
}

Documentation

  • Task specifications for 8 planned features (fluent API, mock support, state verification, flow testing)
  • README with usage examples and best practices
  • Implementation summary with architecture overview

Additional Context

  • All 140 existing tests pass unchanged
  • Wraps Pekko TestKit without reimplementing core functionality
  • Provides escape hatches to underlying Pekko APIs (getPekkoTestKit(), getPekkoProbe())
  • Future enhancements (fluent DSL, @MockActor, state verification) documented in task specifications
Original prompt

You are tasked with implementing testing utilities for the spring-boot-starter-actor project.

REPOSITORY INFORMATION:

  • Branch: main (you MUST work on main branch)
  • Directory: roadmap/4-testing/

PRIORITY: HIGH EFFORT: 4 weeks

OBJECTIVE: Create Spring Boot-friendly testing utilities by wrapping Pekko TestKit. DO NOT reimplement TestKit core.

TASKS: Read all files in roadmap/4-testing/ first.

PHASE 1 (Week 1-2): Spring Boot TestKit Wrapper

  • Read tasks/01-enable-actor-testing.md for detailed specifications
  • Create @EnableActorTesting annotation for auto-configuration
  • Create SpringActorTestKit bean that wraps Pekko TestKit
  • Create auto-configuration classes for testing support
  • Read tasks/02-fluent-test-api.md
  • Build fluent test API wrapping Pekko TestKit (not reimplementing)
  • API should support patterns like: testKit.forActor().spawn().send().expectReply()
  • Read tasks/03-test-probe-support.md
  • Implement ActorTestProbe wrapper
  • Create message expectation helpers
  • Write comprehensive tests for test utilities

PHASE 2 (Week 3): Mock Actor Support

  • Read tasks/04-mock-actor-annotation.md for detailed specifications
  • Create @MockActor annotation
  • Integrate with Mockito for mocking actor refs
  • Integrate with Spring Test framework
  • Read tasks/05-mock-actor-system.md
  • Create MockSpringActorSystem for programmatic mocking
  • Implement behavior configuration for mocks
  • Write comprehensive tests for mock support

PHASE 3 (Week 4): Common Test Utilities

  • Read tasks/06-state-verification.md for detailed specifications
  • Create state verification helpers (assertActorState() utilities)
  • Read tasks/07-message-flow-testing.md
  • Create MessageFlowTester utility
  • Write comprehensive documentation for testing utilities
  • Create example test cases

PHASE 4 (Deferred): Performance Testing

  • Read tasks/08-performance-testing.md
  • This phase is deferred (LOW priority - nice to have)
  • Do NOT implement unless explicitly requested

CRITICAL IMPLEMENTATION NOTES:

  • Wrap Pekko TestKit, DO NOT reimplement core testing functionality
  • Focus on Spring Boot integration and developer experience
  • All testing utilities must work seamlessly with @SpringBootTest
  • Provide fluent APIs that feel natural to Spring Boot developers

WHAT NOT TO DO:

  • DO NOT reimplement Pekko TestKit core functionality
  • DO NOT create complex performance testing initially (deferred)
  • DO NOT create actor visualization in tests

SUCCESS CRITERIA:

  • @EnableActorTesting works seamlessly with @SpringBootTest
  • Fluent test API simplifies common testing patterns
  • Mock actors work correctly with Mockito
  • Tests are easy to write and maintain
  • No reimplementation of Pekko TestKit core

IMPLEMENTATION APPROACH: Create a thin, Spring Boot-friendly wrapper over Pekko TestKit that enhances developer experience without hiding or reimplementing core functionality.

START BY:

  1. Checking out the main branch
  2. Reading all files in roadmap/4-testing/
  3. Reading tasks/TASK_PRIORITY.md to understand the implementation order
  4. Starting with Phase 1: @EnableActorTesting annotation

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot avatar Nov 08 '25 21:11 Copilot