Testprojekt und Unittests erstellen
Dieses How-to ist eine Erweiterung von Add-on erstellen.
Testprojekt erstellen
- TBD
- xUnit verwenden
- Fluent Assertions bis V7.2 -> 8.0 und höher ist nicht erlaubt. Lizenzänderung

Nach Auswahl des Komponententestprojektes muss der Name vergeben werden.
Der Projektname ergibt sich wie folgt: Name des zu testenden Projektes + "Tests" ([ProjektName]Tests). In dem Beispiel lautet der Name ExampleTests.

Projektdatei ersetzen
Vor diesem Schritt sollte das Add-on in der IDE gespeichert werden. Die IDE ist zu schließen, um Probleme beim Bearbeiten der Projektdatei zu vermeiden.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>pit.pitFm.Addons.Example.Tests</RootNamespace>
<AssemblyName>pitFM_Example.Tests</AssemblyName>
<LangVersion>8</LangVersion>
<Title>pitFM_Example.Tests</Title>
<Product>pitFM_Example.Tests</Product>
<Copyright>Copyright © pit-cup GmbH 2025</Copyright>
<Company>pit-cup GmbH</Company>
<FileVersion>1.0.0.0</FileVersion>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<!-- Einheitlicher bin\-Pfad; Unterordner je Konfiguration automatisch -->
<BaseOutputPath>bin\</BaseOutputPath>
</PropertyGroup>
<!-- Definiert den Paketnamen für das pit CliModel je nach Buildkonfiguration. Nur notwendig wenn CliModel wirklich im Addon verwendet wird. Entfernen wenn nicht benötigt. -->
<PropertyGroup>
<CliModelStub Condition="'$(Configuration)' != 'ReleaseWithStrongName'">..\PitFM_CliModelStub\CliModel.Stub.NoStrongName.dll</CliModelStub>
<CliModelStub Condition="'$(Configuration)' == 'ReleaseWithStrongName'">..\PitFM_CliModelStub\CliModel.Stub.StrongName.dll</CliModelStub>
</PropertyGroup>
<Target Name="CopyCliModelStub" AfterTargets="Build">
<Copy SourceFiles="$(CliModelStub)"
DestinationFiles="$(OutDir)CliModel.Stub.dll" />
</Target>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="7.1.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="Snapshooter.Xunit" Version="1.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
Test mit CliModel
Wenn das Add-on die CliModel verwendet, muss ggf. für manche Tests ein STUB von der CliModel-DLL verwendet werden. Für die CliModel sind 2 STUBs verfügbar, einer für Tests von strong named Add-ons und eine für nicht strong named Add-ons. Diese beiden STUBs sind im Beispielprojekt enthalten und müssen von dort in das Solutionverzeichnis unter PitFM_CliModelStub abgelegt werden.
Zu testendes Projekt referenzieren
Außerdem muss das zu testende Projekt in dem Testprojekt referenziert werden. Im Projektmappen-Explorer(Solution-Explorer) muss das Testprojekt aufgeklappt werden.
Mit Rechtsklick auf Abhängigkeiten und Auswahl von Projektverweis hinzufügen landet man im Auswahl-Dialog der Projektreferenzen.

In dem Dialog ist das zu Testende Projekt als Projektreferenz zu markieren.

Jetzt muss das Verzeichnis Properties, mit seinem Inhalt, im Projektverzeichnis gelöscht werden. Die UnitTest1.cs sollte ebenfalls gelöscht werden.
PS C:\source\addons\pitFM_Example> cd .\pitFM_Example.Tests\
PS C:\source\addons\pitFM_Example\pitFM_Example.Tests> rm -r .\Properties\
PS C:\source\addons\pitFM_Example\pitFM_Example.Tests> rm .\UnitTest1.cs
Jetzt die Solution in der IDE öffnen und kompilieren. Es sollten keine Fehlermeldungen und Warnungen angezeigt werden.
Änderungen in git stagen und committen.
PS C:\source\addons\pitFM_Example> git add .
PS C:\source\addons\pitFM_Example> git status
On branch main
Changes to be committed:
new file: PitFM_CliModelStub/CliModel.Stub.NoStrongName.dll
new file: PitFM_CliModelStub/CliModel.Stub.StrongName.dll
modified: pitFM_Example.sln
new file: pitFM_Example.Tests/packages.config
new file: pitFM_Example.Tests/pitFM_Example.Tests.csproj
PS C:\source\addons\pitFM_Example> git commit -m "Add unit test project and configure solution integration"
[main 83d3e0d] Add unit test project and configure solution integration
5 files changed, 67 insertions(+), 1 deletion(-)
create mode 100644 PitFM_CliModelStub/CliModel.Stub.NoStrongName.dll
create mode 100644 PitFM_CliModelStub/CliModel.Stub.StrongName.dll
create mode 100644 pitFM_Example.Tests/packages.config
create mode 100644 pitFM_Example.Tests/pitFM_Example.Tests.csproj