OneAbove.Arena.GameContract.Testing
3.0.1
See the version list below for details.
dotnet add package OneAbove.Arena.GameContract.Testing --version 3.0.1
NuGet\Install-Package OneAbove.Arena.GameContract.Testing -Version 3.0.1
<PackageReference Include="OneAbove.Arena.GameContract.Testing" Version="3.0.1" />
<PackageVersion Include="OneAbove.Arena.GameContract.Testing" Version="3.0.1" />
<PackageReference Include="OneAbove.Arena.GameContract.Testing" />
paket add OneAbove.Arena.GameContract.Testing --version 3.0.1
#r "nuget: OneAbove.Arena.GameContract.Testing, 3.0.1"
#:package OneAbove.Arena.GameContract.Testing@3.0.1
#addin nuget:?package=OneAbove.Arena.GameContract.Testing&version=3.0.1
#tool nuget:?package=OneAbove.Arena.GameContract.Testing&version=3.0.1
OneAbove.Arena.GameContract.Testing
Die Prüfung, die jedes Regelmodul der One-Above Arena bestehen muss.
Sie ist keine Empfehlung: die Plattform übernimmt keine Modulversion, deren Suite nicht grün gelaufen ist. Sie tritt an die Stelle des Code-Reviews, das es zwischen den Repos nicht gibt.
Benutzung
Erben, zwei Glieder ausfüllen, fertig:
using OneAbove.Arena.GameContract.Testing;
public sealed class MeinSpielVertragstest
: GameEngineContract<MeinState, MeinZug, MeineSicht>
{
protected override IGameEngine<MeinState, MeinZug, MeineSicht> Engine { get; }
= new MeinSpiel();
protected override MatchSetup Setup { get; } = new()
{
SeatCount = 2,
RngSeed = 4711,
};
}
Das prüft Reinheit, Determinismus, die Serialisierungsrunde, Totalität, Undichtigkeit und das Partie-Ende — und spielt dabei selbsttätig einige Züge, damit nicht nur der Startzustand geprüft wird.
⚠️ Der eine Haken, den du ausfüllen musst
Hat dein Spiel verdeckte Information — Handkarten, verdeckte Gebote, geheime Ziele — dann musst du sagen, was geheim ist. Sonst ist der Undichtigkeitstest grün und hat nichts geprüft:
protected override IEnumerable<string> GeheimnisseVon(MeinState state, Seat seat) =>
state.Haende[seat.Index].Select(karte => karte.Id);
Die Suite prüft dann, dass keine dieser Zeichenketten in der Sicht eines anderen Sitzes oder in der Zuschauersicht vorkommt.
Bei einem Spiel mit vollständig offener Information (Schach, Vier gewinnt) bleibt die Vorgabe richtig — dort greift der Kanarienvogel: der Seed der Partie darf in keiner Sicht stehen.
Goldene Partien
Aufgezeichnete Partien, bit-identisch nachgespielt. Die einzige Verteidigung gegen eine Änderung, die niemand für eine Regeländerung gehalten hat.
GoldenGameRunner.Verify(GoldenGameFile.Load("2026-09-06-erste-partie.json"), engine);
Wenn ein goldener Test rot wird, ist die erste Frage nicht „was ist an der Aufzeichnung falsch", sondern: haben wir gerade die Regeln geändert?
- Absichtlich ⇒
GameVersionerhöhen und eine neue Aufzeichnung anlegen. Die alte bleibt liegen und muss unter ihrer alten Version weiter grün sein — sie ist der Beweis, dass laufende Partien nachspielbar bleiben. - Unabsichtlich ⇒ du hast gerade einen Fehler gefunden.
Was diese Suite nicht prüft
Deine Spielregeln. Dass ein Turm nicht diagonal zieht, merkt hier niemand. Dafür sind deine eigenen Tests da.
| Product | Versions 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. |
-
net10.0
- OneAbove.Arena.GameContract (>= 3.0.1)
- xunit (>= 2.9.3)
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 |
|---|---|---|
| 4.4.0 | 0 | 9/18/2026 |
| 4.4.0-rc.1 | 0 | 9/18/2026 |
| 4.3.0 | 31 | 9/17/2026 |
| 4.3.0-rc.2 | 26 | 9/17/2026 |
| 4.3.0-rc.1 | 32 | 9/17/2026 |
| 4.2.0 | 38 | 9/17/2026 |
| 4.2.0-rc.1 | 32 | 9/17/2026 |
| 4.1.1 | 53 | 9/17/2026 |
| 4.1.1-rc.1 | 40 | 9/17/2026 |
| 4.1.0 | 37 | 9/17/2026 |
| 4.1.0-rc.3 | 43 | 9/17/2026 |
| 4.1.0-rc.2 | 34 | 9/17/2026 |
| 4.1.0-rc.1 | 40 | 9/17/2026 |
| 4.0.0 | 55 | 9/16/2026 |
| 4.0.0-rc.5 | 75 | 9/16/2026 |
| 4.0.0-rc.4 | 57 | 9/15/2026 |
| 4.0.0-rc.3 | 39 | 9/15/2026 |
| 4.0.0-rc.2 | 40 | 9/15/2026 |
| 4.0.0-rc.1 | 39 | 9/15/2026 |
| 3.0.1 | 85 | 9/14/2026 |