# Tutorial 9: Testing Your Workflow Write unit tests for workflows using `RecordingSerdicaLegacyRabbitTransport` and `TechnicalStyleWorkflowTestHelpers`. ## Test Setup Pattern 1. Create a recording transport with pre-configured responses 2. Build a test service provider via `TechnicalStyleWorkflowTestHelpers.CreateServiceProvider` 3. Resolve `WorkflowRuntimeService` from DI 4. Call `StartWorkflowAsync` with test payload 5. Assert: tasks created, transport calls made, state values correct 6. Optionally complete tasks and verify downstream behavior ## What to Test | Scenario | Approach | |----------|----------| | Workflow starts correctly | Assert single open task after start | | Service calls made in order | `transport.Invocations.Select(x => x.Command).Should().Equal(...)` | | Rejection flow | Complete task with `"answer": "reject"`, verify cancel call | | Approval flow | Complete with `"answer": "approve"`, verify conversion calls | | Operations failure re-opens task | Check same task re-appears after operations return `passed: false` | | Sub-workflow creates child tasks | Query tasks by child workflow name | | Business reference set | `startResponse.BusinessReference.Key.Should().Be(...)` | ## C#-Only Tutorial - [C# Test Examples](csharp/)