Skip to content

Dummies: Exercise both packaged target-framework assets in compatibility tests #191

Description

@Reefact

Problem

Dummies targets netstandard2.0 and net8.0, but Dummies.UnitTests targets only net10.0.

A net10.0 test project resolves the closest compatible project asset, so the test suite primarily exercises the net8.0 build. Building both target frameworks proves compilation, but does not provide equivalent consumer-level coverage of the netstandard2.0 assembly that is shipped in the package.

Impact

A regression specific to the downlevel asset can reach NuGet even while the main test suite remains green. This is especially relevant for conditional compilation, API availability, numeric edge cases, random sampling and packaging metadata.

Direction

Add a small compatibility test strategy that consumes each packaged asset deliberately.

Possible approaches include separate smoke-test consumers, a build-and-run matrix with a target that can only select netstandard2.0, or packing the NuGet and validating its assets from isolated consumer projects. The solution should test the package as a consumer sees it rather than relying only on the project reference selected by net10.0.

Keep the full behavioral suite where it is useful; the compatibility layer can remain focused on representative public API and edge cases.

Acceptance criteria

  • CI deliberately selects and validates the netstandard2.0 asset.
  • CI deliberately selects and validates the net8.0 asset.
  • Tests consume the packed package, or otherwise prove which asset is under test.
  • Smoke coverage includes scalar generation, constraints, composition, collections and seeded reproducibility.
  • Conditional net8.0 APIs (DateOnly, TimeOnly, Int128, UInt128, Half) are verified as present only on the intended asset.
  • A failure identifies the target asset that regressed.

Context

Surfaced during a focused review of the standalone Dummies library.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions