Excalibur.Testing.Conformance 10.0.0-alpha.9

This is a prerelease version of Excalibur.Testing.Conformance.
dotnet add package Excalibur.Testing.Conformance --version 10.0.0-alpha.9
                    
NuGet\Install-Package Excalibur.Testing.Conformance -Version 10.0.0-alpha.9
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Excalibur.Testing.Conformance" Version="10.0.0-alpha.9" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Excalibur.Testing.Conformance" Version="10.0.0-alpha.9" />
                    
Directory.Packages.props
<PackageReference Include="Excalibur.Testing.Conformance" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Excalibur.Testing.Conformance --version 10.0.0-alpha.9
                    
#r "nuget: Excalibur.Testing.Conformance, 10.0.0-alpha.9"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Excalibur.Testing.Conformance@10.0.0-alpha.9
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Excalibur.Testing.Conformance&version=10.0.0-alpha.9&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Excalibur.Testing.Conformance&version=10.0.0-alpha.9&prerelease
                    
Install as a Cake Tool

Excalibur.Testing.Conformance

Conformance test kits for Excalibur infrastructure implementations. Provides reusable abstract test suites that verify provider implementations conform to the expected contracts for IEventStore, ISnapshotStore, IOutboxStore, ISagaStore, and other infrastructure interfaces.

Installation

dotnet add package Excalibur.Testing.Conformance

Purpose

When implementing a custom provider (e.g., a new database backend for event sourcing), use these conformance test kits to verify your implementation meets all contract requirements. Each test kit provides a comprehensive set of tests covering happy paths, edge cases, and error handling.

Available Test Kits

42 kits ship in this package. The most commonly implemented:

Test Kit Interface Under Test
EventStoreConformanceTestKit IEventStore
SnapshotStoreConformanceTestKit ISnapshotStore
OutboxStoreConformanceTestKit IOutboxStore
InboxStoreConformanceTestKit IInboxStore
SagaStoreConformanceTestKit ISagaStore
DeadLetterStoreConformanceTestKit IDeadLetterStore
LeaderElectionConformanceTestKit ILeaderElection
EncryptionProviderConformanceTestKit IEncryptionProvider
AuditStoreConformanceTestKit IAuditStore
TransportConformanceTestKit<TSender, TReceiver> transport sender/receiver pairs
DbConformanceTestKit IDb
PersistenceProviderConformanceTestKit persistence providers

Also included, covering scheduling, CDC, claim-check, caching, deduplication, retry, workflow, key management, and compliance surfaces:

CacheTagTrackerConformanceTestKit, CdcProviderConformanceTestKit, ClaimCheckProviderConformanceTestKit, ComplianceAlertHandlerConformanceTestKit, ComplianceMetricsConformanceTestKit, ControlValidationServiceConformanceTestKit, ControlValidatorConformanceTestKit, CronJobStoreConformanceTestKit, DataInventoryStoreConformanceTestKit, DeduplicatorConformanceTestKit, EncryptionMigrationServiceConformanceTestKit, EncryptionProviderRegistryConformanceTestKit, EncryptionTelemetryConformanceTestKit, ErasureStoreConformanceTestKit, FipsDetectorConformanceTestKit, KeyCacheConformanceTestKit, KeyEscrowServiceConformanceTestKit, KeyManagementProviderConformanceTestKit, KeyRotationAlertHandlerConformanceTestKit, KeyRotationSchedulerConformanceTestKit, LegalHoldStoreConformanceTestKit, MasterKeyBackupServiceConformanceTestKit, MinimalWiringConformanceTestKit<TBuilderExtension>, RetryPolicyConformanceTestKit, ScheduleStoreConformanceTestKit, SchedulerConformanceTestKit, Soc2ReportGeneratorConformanceTestKit, Soc2ReportStoreConformanceTestKit, StreamingHandlerConformanceTestKit, WorkflowConformanceTestKit.

Quick Start

Derive from the kit for the interface you implement and register your provider using its own public registration extension. The kit resolves the service under test from a real container built from those registrations, so every assertion runs against the object a consumer actually gets.

public class MyCustomEventStoreConformanceTests : EventStoreConformanceTestKit
{
    private readonly MyProviderFixture _fixture;

    // The only member you must implement. Call your shipped registration extension and nothing else.
    protected override void ConfigureProvider(IServiceCollection services) =>
        services.AddExcalibur(x => x.AddEventSourcing(es => es.UseMyProvider(_fixture.ConnectionString)));

    // Optional: override to reset state between test runs.
    protected override async Task CleanupAsync() => await _fixture.CleanupAsync();
}

The kit never accepts an already-constructed store. Registering the store by hand inside ConfigureProvider defeats the point: it would certify an instance the test author assembled rather than the one your registration produces.

What a green run covered

Some arms exercise an optional capability of the contract — an outbox or dead-letter store's administrative facet, for example. An arm whose capability is unavailable used to return early, which every test runner reports exactly as it reports an arm that ran and passed.

ConformanceArmLedger now records both: Executed lists the arms that ran their bodies, Skipped lists those that did not with the capability and reason, and Describe() formats both. It is process-wide and additive, so call Reset() before a run you intend to read.

ConformanceArmLedger.Reset();
// ... run your derived kit ...
Console.WriteLine(ConformanceArmLedger.Describe());

A run that was green before may now report skips. That is not a regression: the coverage is unchanged and the reporting no longer overstates it. The ledger records; you decide what an unverified arm means. Override ConformanceTestKit.OnArmSkipped to surface skips in your runner (Assert.Skip on xUnit v3, Assert.Ignore on NUnit) or to throw, which certifies that every capability your component provides was reached.

If your store is decorated: the outbox kit discovers capabilities through GetService(Type), which a decorator forwards. IDeadLetterStore exposes no such method, so its kit resolves the admin facet from the store's own type — sound for a store handed to the kit directly, unsound for a wrapped one. Override DeadLetterStoreConformanceTestKit.ResolveAdminFacet to return the facet the wrapper holds; otherwise those arms report as skips.

Which testing kit do I reach for?

This package answers one question: "Does my custom provider implementation obey the framework contract?" — use a conformance kit when you write a new backend for an infrastructure interface (a new IEventStore, IOutboxStore, ISagaStore, ILeaderElection, and so on) and want to prove it satisfies every contract requirement.

It is not a resilience/fault-injection kit. To prove your handlers and sagas stay idempotent and eventually consistent under adverse transport conditions — duplicate delivery, message reordering, broker disconnects, consumer crash-and-restart, slow consumers — use the chaos / fault-injection test kit instead. The two kits share the same underlying test infrastructure and container fixtures, so there is no duplicated surface: conformance verifies a provider matches a contract; chaos verifies business logic survives faults.

Documentation

Detailed guides live in the Excalibur repository. Each kit's XML documentation describes the members it requires and the contract each arm asserts.

License

This package is part of the Excalibur framework. The full licence text ships inside the package and is shown on the package listing's License tab.

Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.0-alpha.9 48 8/31/2026
10.0.0-alpha.8 62 8/14/2026
10.0.0-alpha.7 56 8/13/2026
10.0.0-alpha.6 59 8/11/2026
10.0.0-alpha.5 55 8/10/2026
3.0.0-alpha.216 92 6/30/2026
3.0.0-alpha.215 78 6/23/2026
3.0.0-alpha.214 75 6/23/2026
3.0.0-alpha.208 80 6/11/2026
3.0.0-alpha.207 70 6/11/2026
3.0.0-alpha.205 69 6/10/2026
3.0.0-alpha.204 79 6/8/2026
3.0.0-alpha.203 63 6/8/2026
3.0.0-alpha.202 69 6/8/2026
3.0.0-alpha.201 70 6/8/2026
3.0.0-alpha.199 64 6/8/2026
3.0.0-alpha.198 79 5/28/2026
3.0.0-alpha.197 76 5/28/2026
3.0.0-alpha.194 71 5/20/2026
3.0.0-alpha.193 81 5/13/2026
Loading failed