B3.Blicks.TestKit 2026.6.29.4

B3.Blicks.TestKit

The integration-test harness for B3 Blicks. A Blick's (or an app's) test project references this package to prove a Blick is valid, loads into its own isolated AssemblyLoadContext, and that a selected set of versions composes without route or service collisions. Everything runs fully offline via the resolver's LocalPathSource — no NuGet feed required.

Three test surfaces

  • BlickContract — structural assertions on an IBlick (non-empty Name, NuGet-parseable Version, non-null nav/widget collections, non-empty routes). No .nupkg load needed.
  • BlickLoadHarness — boots the real resolver against a local .nupkg directory and returns a LoadedBlickSet to assert on (ALC isolation, version, routes, ConfigureServices, static assets).
  • BlickCombinationHarness — loads a full selection and fails with a readable message on a route collision, an unresolved Blick, or a throwing ConfigureServices.
// Contract
BlickContract.AssertValid<MyBlick>();

// Load + assert one Blick (one-liner)
var set = await BlickLoadHarness.LoadAndAssert("B3.Blicks.MyThing.Blick", "1.0.0", packageDir, tempDir);

// Combination — catches cross-Blick collisions before a cluster does
await BlickCombinationHarness.AssertCombinationValid(
    [("B3.Blicks.ReportsSample.Blick", "2.0.0"), ("B3.Blicks.NotesSample.Blick", "1.1.0")], packageDir, tempDir);

NUnit and bUnit are exposed transitively so a consuming test project gets them without re-declaring the versions. See docs/USAGE.md §4 for the full workflow.

No packages depend on B3.Blicks.TestKit.

.NET 10.0

Version Downloads Last updated
2026.8.6.1 7 8/6/2026
2026.8.3.3 5 8/4/2026
2026.8.3.2 4 8/4/2026
2026.8.3.1 1 8/4/2026
2026.8.1.1 5 8/1/2026
2026.7.31.1 4 7/31/2026
2026.7.30.1 9 7/30/2026
2026.7.26.4 4 7/27/2026
2026.7.26.3 1 7/27/2026
2026.7.26.2 4 7/26/2026
2026.7.26.1 4 7/26/2026
2026.7.23.5 4 7/23/2026
2026.7.23.4 4 7/23/2026
2026.7.23.3 4 7/23/2026
2026.7.23.2 1 7/23/2026
2026.7.23.1 4 7/23/2026
2026.7.22.1 4 7/22/2026
2026.7.19.1 4 7/19/2026
2026.7.18.19 4 7/19/2026
2026.7.18.18 4 7/19/2026
2026.7.18.17 4 7/18/2026
2026.7.18.16 1 7/18/2026
2026.7.18.15 4 7/18/2026
2026.7.18.14 4 7/18/2026
2026.7.18.13 1 7/18/2026
2026.7.18.12 1 7/18/2026
2026.7.18.11 4 7/18/2026
2026.7.18.10 1 7/18/2026
2026.7.18.9 4 7/18/2026
2026.7.18.8 4 7/18/2026
2026.7.18.7 1 7/18/2026
2026.7.18.6 4 7/18/2026
2026.7.18.5 1 7/18/2026
2026.7.18.4 4 7/18/2026
2026.7.18.3 1 7/18/2026
2026.7.18.2 4 7/18/2026
2026.7.18.1 11 7/18/2026
2026.7.17.2 4 7/17/2026
2026.7.17.1 4 7/17/2026
2026.7.13.1 4 7/14/2026
2026.7.5.2 5 7/5/2026
2026.7.5.1 5 7/5/2026
2026.7.4.4 9 7/4/2026
2026.7.4.3 5 7/4/2026
2026.7.4.2 5 7/4/2026
2026.7.4.1 5 7/4/2026
2026.7.3.2 5 7/3/2026
2026.7.3.1 4 7/3/2026
2026.6.30.5 5 7/1/2026
2026.6.30.4 5 6/30/2026
2026.6.30.3 5 6/30/2026
2026.6.30.2 2 6/30/2026
2026.6.30.1 2 6/30/2026
2026.6.29.8 5 6/30/2026
2026.6.29.7 2 6/30/2026
2026.6.29.6 5 6/30/2026
2026.6.29.5 2 6/30/2026
2026.6.29.4 2 6/30/2026
2026.6.29.3 5 6/30/2026
2026.6.29.2 2 6/30/2026
2026.6.29.1 5 6/30/2026
2026.6.28.3 5 6/28/2026
2026.6.28.2 5 6/28/2026
2026.6.28.1 2 6/28/2026
2026.6.27.7 5 6/28/2026
2026.6.27.6 5 6/28/2026
2026.6.27.5 2 6/28/2026
2026.6.27.4 2 6/28/2026
2026.6.27.3 2 6/28/2026
2026.6.27.2 6 6/27/2026