WorkflowForge.Testing
2.1.2
dotnet add package WorkflowForge.Testing --version 2.1.2
NuGet\Install-Package WorkflowForge.Testing -Version 2.1.2
<PackageReference Include="WorkflowForge.Testing" Version="2.1.2" />
<PackageVersion Include="WorkflowForge.Testing" Version="2.1.2" />
<PackageReference Include="WorkflowForge.Testing" />
paket add WorkflowForge.Testing --version 2.1.2
#r "nuget: WorkflowForge.Testing, 2.1.2"
#:package WorkflowForge.Testing@2.1.2
#addin nuget:?package=WorkflowForge.Testing&version=2.1.2
#tool nuget:?package=WorkflowForge.Testing&version=2.1.2
WorkflowForge.Testing
Test doubles and helpers for WorkflowForge. Exercise operations with FakeWorkflowFoundry instead of spinning up the full runtime.
Installation
dotnet add package WorkflowForge.Testing
Features
FakeWorkflowFoundry: implementsIWorkflowFoundryfor unit tests- Execution tracking:
ExecutedOperationsfor order and coverage assertions - Plumbing: swap in logger,
WorkflowForgeOptions, andIServiceProviderwhen you need them
Quick start
Single operation
using WorkflowForge.Testing;
using Xunit;
public class MyOperationTests
{
[Fact]
public async Task Operation_Should_SetProperty()
{
var foundry = new FakeWorkflowFoundry();
var operation = new MyCustomOperation();
await operation.ForgeAsync("input", foundry, CancellationToken.None);
Assert.True(foundry.Properties.ContainsKey("myKey"));
Assert.Equal("expectedValue", foundry.Properties["myKey"]);
}
}
Full foundry run
[Fact]
public async Task Workflow_Should_ExecuteAllOperations()
{
var foundry = new FakeWorkflowFoundry();
var op1 = new LoggingOperation("Step 1");
var op2 = new LoggingOperation("Step 2");
foundry.AddOperation(op1);
foundry.AddOperation(op2);
await foundry.ForgeAsync();
Assert.Equal(2, foundry.ExecutedOperations.Count);
Assert.Contains(op1, foundry.ExecutedOperations);
Assert.Contains(op2, foundry.ExecutedOperations);
}
Logger and reset
[Fact]
public async Task Operation_Should_Log_Messages()
{
var testLogger = new TestLogger();
var foundry = new FakeWorkflowFoundry { Logger = testLogger };
var operation = new LoggingOperation("Test");
await operation.ForgeAsync(null, foundry, CancellationToken.None);
Assert.Contains(testLogger.Messages, m => m.Contains("Test"));
}
private readonly FakeWorkflowFoundry _foundry = new();
public void Cleanup() => _foundry.Reset();
FakeWorkflowFoundry API
| Property / method | Notes |
|---|---|
ExecutionId |
Guid (generated; you can set it) |
Properties |
ConcurrentDictionary<string, object?> |
CurrentWorkflow |
IWorkflow? |
Logger |
IWorkflowForgeLogger (defaults to null logger) |
Options |
WorkflowForgeOptions |
ServiceProvider |
IServiceProvider? |
Operations |
Operations queued on the fake |
Middlewares |
Middleware list |
ExecutedOperations |
What ran during ForgeAsync |
ForgeAsync() |
Runs operations in order |
Reset() |
Clears state between tests |
TrackExecution(operation) |
Marks an op as executed (manual) |
License
MIT. See the repository LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- WorkflowForge (>= 2.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v2.1.2: Fixed ILRepacked extensions (Polly, OpenTelemetry, Serilog) that were missing transitive dependencies and threw a runtime FileNotFoundException (e.g. Microsoft.Bcl.TimeProvider) — the required BCL/Microsoft.Extensions packages now flow to consumers. Implemented foundry performance monitoring so EnablePerformanceMonitoring()/GetPerformanceStatistics() work end-to-end. Fixed pooled-foundry state leaking across executions and audit entries recording "Unknown" workflow names. Centralized package versioning and shared metadata. Hardened lifecycle-event exception isolation and smith disposal.