-
Notifications
You must be signed in to change notification settings - Fork 0
Testing
viamu edited this page Mar 1, 2026
·
3 revisions
| Tool | Purpose |
|---|---|
| xUnit | Test framework |
| NSubstitute | Mocking library |
| FluentAssertions | Assertion library |
# Run all tests
dotnet test
# Run with verbose output
dotnet test --verbosity normal
# Run a specific test class
dotnet test --filter "FullyQualifiedName~CollectionParserTests"
# Run tests from a specific namespace
dotnet test --filter "Namespace~CodeGenesis.Engine.Tests.Claude"| Test Class | Target | Tests |
|---|---|---|
UsePipelineStepTests |
Sub-pipeline execution, input mapping, output merging, circular detection | 20 |
DynamicStepTests |
Success/failure execution, retry, rate limit, fail_if, clone | 20 |
PipelineConfigLoaderTests |
Template resolution, YAML loading, validation | 20 |
ClaudeResponseTests |
JSON parsing, FailureKind classification, Failure factory |
15 |
CollectionParserTests |
JSON array, comma-separated, newline-separated, fallbacks | 12 |
StepEntryTests |
Discriminators (IsSimpleStep, IsForeach, etc.), ToStepConfig
|
11 |
McpServerConfigTests |
Template resolution, immutability | 10 |
McpContextBuilderTests |
MCP tools section generation for system prompts | 9 |
PipelineContextTests |
Initialization, metrics accumulation, step outputs | 6 |
StepResultTests |
Record equality, outcome values | 6 |
RetryPolicyTests |
Cascading resolution (step โ global โ defaults) | 4 |
| Total | 133 |
Tests run automatically via GitHub Actions on every push to main and on pull requests.
The workflow:
- โ๏ธ Sets up .NET 10 SDK (10.0.103)
- โ๏ธ Restores dependencies
- โ๏ธ Builds in Release configuration
- โ๏ธ Runs all tests
| Convention | Example |
|---|---|
| File location | Mirror source namespace (Claude/, Config/, Pipeline/, Steps/) |
| Test naming | MethodName_Scenario_ExpectedResult |
| Mocking | Use NSubstitute for interfaces (IClaudeRunner, IStepExecutor) |
| Assertions | Use FluentAssertions (result.Should().Be(...)) |
[Fact]
public async Task ExecuteAsync_Success_ReturnsSuccessResult()
{
// Arrange
_claude.RunAsync(Arg.Any<ClaudeRequest>(), Arg.Any<CancellationToken>())
.Returns(new ClaudeResponse
{
Success = true,
Result = "done!",
InputTokens = 100,
OutputTokens = 50,
CostUsd = 0.01,
Duration = TimeSpan.FromSeconds(2)
});
var step = MakeStep();
var ctx = MakeContext();
// Act
var result = await step.ExecuteAsync(ctx, CancellationToken.None);
// Assert
result.Outcome.Should().Be(StepOutcome.Success);
result.Output.Should().Be("done!");
}Tip
When testing steps that depend on IClaudeRunner, use NSubstitute.Returns() to simulate different Claude responses (success, timeout, rate limit, max_turns, etc.).
๐ Home
- ๐ Getting Started
- ๐ป CLI Reference
- ๐ YAML Reference
- ๐ Step Types
- ๐ MCP Servers
- ๐ฆ Context Bundles
- โ๏ธ Configuration
- ๐๏ธ Project Structure
- ๐งช Testing