Table of Contents

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

Neues Testprojekt in VS erstellen

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. Neues Testprojekt in VS konfigurieren

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.
Projektreferenz im Testprojekt erstellen
In dem Dialog ist das zu Testende Projekt als Projektreferenz zu markieren.
Die Projektreferenz für das Testprojekt auswählen

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