Phase 0: Test-Fundament & Architektur-Doku

- IBKRTrader.Tests (xUnit + NSubstitute + FluentAssertions), nur Unit-Tests
- Repo-lokale NuGet.config: Test-Pakete in Allowlist ergaenzt
- Hauptprojekt: Test-Unterordner aus SDK-Globbing ausgeschlossen
- docs/ARCHITECTURE.md: Plan + Phasen-Checkliste
- grundregeln.md: .NET 10, Launcher-Modell; DB-Passwort entfernt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
This commit is contained in:
Richard
2026-07-27 09:58:49 +02:00
parent ebeb035e92
commit 9abad277c2
7 changed files with 253 additions and 7 deletions
+30
View File
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- net10.0-windows + WinForms, weil das Testprojekt die WinForms-Hauptassembly referenziert -->
<TargetFramework>net10.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="FluentAssertions" Version="7.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IBKRTrader.csproj" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
+29
View File
@@ -0,0 +1,29 @@
using FluentAssertions;
using IBKRTrader.Core.Settings;
using IBKRTrader.Core.Workers;
namespace IBKRTrader.Tests;
/// <summary>
/// Phase-0-Smoke-Test: bestätigt, dass die Test-Infrastruktur steht und die
/// Referenz auf die Hauptassembly (IBKRTrader) kompiliert und lädt.
/// </summary>
[Trait("cat", "unit")]
public class SmokeTests
{
[Fact]
public void MainAssembly_IsReferenced_AndDefaultsLoad()
{
var settings = new AppSettings();
settings.Should().NotBeNull();
settings.IBKR.Should().NotBeNull();
settings.Logging.Level.Should().Be("Info");
}
[Fact]
public void WorkerType_HasWorkerAndService()
{
Enum.GetNames<WorkerType>().Should().Contain(["Worker", "Service"]);
}
}