Wolfgang.Etl.TestKit
0.23.4
Prefix Reserved
dotnet add package Wolfgang.Etl.TestKit --version 0.23.4
NuGet\Install-Package Wolfgang.Etl.TestKit -Version 0.23.4
<PackageReference Include="Wolfgang.Etl.TestKit" Version="0.23.4" />
<PackageVersion Include="Wolfgang.Etl.TestKit" Version="0.23.4" />
<PackageReference Include="Wolfgang.Etl.TestKit" />
paket add Wolfgang.Etl.TestKit --version 0.23.4
#r "nuget: Wolfgang.Etl.TestKit, 0.23.4"
#:package Wolfgang.Etl.TestKit@0.23.4
#addin nuget:?package=Wolfgang.Etl.TestKit&version=0.23.4
#tool nuget:?package=Wolfgang.Etl.TestKit&version=0.23.4
Wolfgang.Etl.TestKit
Test doubles and harnesses for exercising components built on
Wolfgang.Etl.Abstractions — ready-made
extractors, loaders, and transformers, fault injection, a deterministic clock and progress timer, and
end-to-end scenario helpers.
Install
dotnet add package Wolfgang.Etl.TestKit
For xUnit contract-test base classes that verify your own components against the full behavioural
contract of their base type, add
Wolfgang.Etl.TestKit.Xunit as well.
What's in the box
| Type | Use |
|---|---|
TestExtractor<T> / TestLoader<T> / TestTransformer<T> |
Drive or capture a pipeline with in-memory doubles. |
FaultyExtractor<T> / FaultyLoader<T> / FaultyTransformer<T> |
Inject a fault at a chosen item; route it through the base error hook (SkipErrors() / HandleErrorsWith(policy) / CapturedErrors). |
SnapshotTestLoader<T> |
Snapshot / approval testing of loaded output. |
RecordingMiddleware<T> |
Assert on items flowing through WithMiddleware(...). |
ManualTimeSource + WithTimeSource |
Drive Report timing (Elapsed, throughput, ETA) from a fake clock. |
ManualProgressTimerCore + WithManualProgressTimer |
Fire a stage's progress callback deterministically with Tick() — no per-component timer plumbing. |
EtlScenario |
Compose extract → (transform) → load, optionally inject a fault, run through EtlPipeline, and assert the final state in one expression. |
Quick start
using Wolfgang.Etl.TestKit;
// In-memory doubles + deterministic progress timer
var timer = new ManualProgressTimerCore();
var extractor = new TestExtractor<int>(new[] { 1, 2, 3 }).WithManualProgressTimer(timer);
Report? captured = null;
await using var e = extractor.ExtractAsync(new SyncProgress<Report>(r => captured = r)).GetAsyncEnumerator();
await e.MoveNextAsync();
timer.Tick(); // fires the progress callback exactly once
Assert.NotNull(captured);
// One-liner end-to-end scenario with a fault that is skipped and counted
await EtlScenario
.From(new FaultyExtractor<int>(source, failAt: 2))
.To(new TestLoader<int>(collectItems: true))
.SkipErrors()
.RunAndAssertAsync(expectedLoaded: new[] { 1, 3 }, expectedErrorItemCount: 1);
See the doubles' XML docs for the full surface.
Supported frameworks
Multi-targets net462, netstandard2.0, netstandard2.1, and net5.0 through net10.0.
Part of the ETL-Abstractions family — see the repository README for the full package set and contributor/build docs.
| 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 is compatible. 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 is compatible. 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 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 is compatible. |
| 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. |
-
.NETFramework 4.6.2
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.11)
- Microsoft.Bcl.Memory (>= 10.0.11)
- System.Linq.Async (>= 7.0.1)
- Wolfgang.Etl.Abstractions (>= 0.23.4)
-
.NETFramework 4.8.1
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.11)
- Microsoft.Bcl.Memory (>= 10.0.11)
- System.Linq.Async (>= 7.0.1)
- Wolfgang.Etl.Abstractions (>= 0.23.4)
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.11)
- Microsoft.Bcl.Memory (>= 10.0.11)
- System.Linq.Async (>= 7.0.1)
- Wolfgang.Etl.Abstractions (>= 0.23.4)
-
net10.0
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.11)
- Microsoft.Bcl.Memory (>= 10.0.11)
- System.Linq.Async (>= 7.0.1)
- Wolfgang.Etl.Abstractions (>= 0.23.4)
-
net8.0
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.11)
- Microsoft.Bcl.Memory (>= 10.0.11)
- System.Linq.Async (>= 7.0.1)
- Wolfgang.Etl.Abstractions (>= 0.23.4)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Wolfgang.Etl.TestKit:
| Package | Downloads |
|---|---|
|
Wolfgang.Etl.TestKit.Xunit
Abstract xUnit contract test base classes for verifying custom ETL extractors, transformers, and loaders built on Wolfgang.Etl.Abstractions. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.23.4 | 811 | 8/29/2026 |
| 0.23.3 | 339 | 8/21/2026 |
| 0.23.2 | 709 | 8/18/2026 |
| 0.23.1 | 590 | 8/17/2026 |
| 0.23.0 | 339 | 8/15/2026 |
| 0.22.0 | 934 | 8/13/2026 |
| 0.14.0 | 1,261 | 8/3/2026 |
| 0.13.0 | 496 | 7/30/2026 |
| 0.12.0 | 317 | 7/29/2026 |
| 0.11.0 | 464 | 7/28/2026 |
| 0.10.1 | 297 | 7/27/2026 |
| 0.10.0 | 2,350 | 6/29/2026 |
| 0.9.0 | 1,122 | 6/25/2026 |
| 0.8.1 | 212 | 6/22/2026 |
| 0.8.0 | 1,604 | 4/27/2026 |
| 0.7.0 | 655 | 4/27/2026 |
| 0.6.0 | 2,153 | 3/25/2026 |
| 0.5.0 | 1,092 | 3/16/2026 |
| 0.0.0 | 122 | 3/8/2026 |