• Spiele
  • Branche
  • Ressourcen
  • Community
  • Lernen
  • Support
Entwicklung
Unity Engine
Erstellen Sie 2D- und 3D-Spiele für jede Plattform
HerunterladenAbonnements und Preise
Monetarisierung
In-App-Kauf (IAP)
Entdecken und verwalten Sie IAP über die Stores
Mediation
Maximieren Sie den Umsatz und optimieren Sie die Monetarisierung
Anzeigenqualität
Schützen Sie das Benutzererlebnis Ihrer App
Tapjoy
Langfristige Benutzerloyalität aufbauen
Alle Monetarisierungsprodukte
Nutzerakquisition
Nutzerakquisition
Entdecken Sie und gewinnen Sie mobile Benutzer
Unity Vector AI
Verbinden Sie Spieler mit den richtigen Spielen
Aura On-Device-Werbung
Erreichen Sie Benutzer auf dem Gerät zur Spitzenzeit der Interaktion
Alle Wachstumsprodukte
Anwendungsfälle
3D-Zusammenarbeit
Erstellen und überprüfen Sie 3D-Projekte in Echtzeit
Immersive Schulung
In immersiven Umgebungen trainieren
Kundenerlebnisse
Interaktive 3D-Erlebnisse erstellen
Alle branchenspezifischen Lösungen
Branchen
Fertigung
Betriebliche Exzellenz erreichen
Einzelhandel
In-Store-Erlebnisse in Online-Erlebnisse umwandeln
Automobilindustrie
Innovation und In-Car-Erlebnisse steigern
Alle Branchen
Technische Bibliothek
Dokumentation
Offizielle Benutzerhandbücher und API-Referenzen
Entwicklertools
Versionsfreigaben und Fehlerverfolgung
Roadmap
Bevorstehende Funktionen überprüfen
Glossar
Bibliothek technischer Begriffe
Einblicke
Fallstudien
Erfolgsgeschichten aus der Praxis
Best-Practice-Leitfäden
Experten Tipps und Tricks
Alle Ressourcen
Neues
Blog
Aktualisierungen, Informationen und technische Tipps
Neuigkeiten
Nachrichten, Geschichten und Pressezentrum
Community Hub
Diskussionen
Diskutieren, Probleme lösen und verbinden
Veranstaltungen
Globale und lokale Veranstaltungen
Gemeinschaftsgeschichten
Made with Unity
Präsentation von Unity-Schöpfern
Livestreams
Schließen Sie sich Entwicklern, Kreativen und Insidern an
Unity Awards
Feier der Unity-Schöpfer weltweit
Für jedes Niveau
Unity Learn
Meistern Sie Unity-Fähigkeiten kostenlos
Professionelles Training
Verbessern Sie Ihr Team mit Unity-Trainern
Neu bei Unity
Erste Schritte
Beginnen Sie noch heute mit dem Lernen
Unity Essential Pathways
Sind Sie neu bei Unity? Starten Sie Ihre Reise
Anleitungen
Umsetzbare Tipps und bewährte Verfahren
Bildung
Für Studierende
Starten Sie Ihre Karriere
Für Lehrkräfte
Optimieren Sie Ihr Lehren
Lizenzstipendium für Bildungseinrichtungen
Bringen Sie die Kraft von Unity in Ihre Institution
Zertifizierungen
Beweisen Sie Ihre Unity-Meisterschaft
Kundendienstoptionen
Hilfe erhalten
Wir helfen Ihnen, mit Unity erfolgreich zu sein
Erfolgspläne
Erreichen Sie Ihre Ziele schneller mit Expertenunterstützung
FAQ
Antworten auf häufige Fragen
Kontakt aufnehmen
Verbinden Sie sich mit unserem Team
Abonnements und Preise
Sprache
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
Sozial
Währung
Kaufen
  • Produkte
  • Unity Ads
  • Abonnement
  • Unity Asset Store
  • Wiederverkäufer
Bildung
  • Schüler/Studierende
  • Lehrkräfte
  • Einrichtungen
  • Zertifizierung
  • Learn
  • Programm zur Entwicklung von Fähigkeiten
Herunterladen
  • Unity Hub
  • Datei herunterladen
  • Beta-Programm
Unity Labs
  • Labs
  • Veröffentlichungen
Ressourcen
  • Lernplattform
  • Community
  • Dokumentation
  • Unity QA
  • FAQ
  • Status der Dienste
  • Fallstudien
  • Made with Unity
Unity
  • Unser Unternehmen
  • Newsletter
  • Blog
  • Veranstaltungen
  • Stellenangebote
  • Hilfe
  • Presse
  • Partner
  • Investoren
  • Partner
  • Sicherheit
  • Social Impact
  • Inklusion & Vielfalt
  • Kontakt aufnehmen
Copyright © 2025 Unity Technologies
  • Rechtliches
  • Datenschutzrichtlinie
  • Cookies
  • Verkaufen oder teilen Sie nicht meine personenbezogenen Daten

"Unity", Unity-Logos und sonstige Marken von Unity sind Marken oder eingetragene Markenzeichen von Unity Technologies oder den zugehörigen verbundenen Unternehmen in den USA und anderen Ländern (weitere Informationen finden Sie hier). Alle anderen Namen oder Marken sind Marken ihrer jeweiligen Eigentümer.

Hero background image

Mit dem Unity Test Framework automatisierte Tests für Ihre Spiele durchführen

Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.
Klicken Sie hier.

In der Spieleentwicklung können manuelle Tests schnell repetitiv und fehleranfällig werden. Haben Sie sich jemals in einem dieser endlos erscheinenden Testzyklen wiedergefunden, während Sie an einer neuen Funktion arbeiten oder versuchen, einen Fehler zu beheben?

Durch die Automatisierung Ihrer Codetests können Sie mehr Zeit für die kreative Spieleentwicklung und weniger für repetitive (aber wichtige) Qualitätssicherungsaufgaben aufwenden, die sicherstellen, dass das Hinzufügen, Entfernen oder Ändern von Code Ihr Projekt nicht beeinträchtigt.

Unity hilft Ihnen mit dem Unity Test Framework, automatisierte Tests für Ihre Spiele zu erstellen, zu verwalten und auszuführen.

  • test-two-ways-unity-test-framework
  • Unity Test Framework testen
  • Unity Test Framework einrichten
  • Definitionen der Test Assembly
  • Referenzen zu Assembly-Definitionen hinzufügen

Testen Sie zwei Möglichkeiten im Unity Test Framework

Unity Test Framework (UTF) ermöglicht es Ihnen, Ihren Projektcode sowohl im Bearbeitungs- als auch im Wiedergabemodus zu testen. Sie können auch Testcode für verschiedene Plattformen wie Standalone, iOS oder Android als Ziel festlegen.

Das UTF wird installiert, indem Sie es mit dem Paketmanager zu Ihrem Projekt hinzufügen.

UTF integriert sich mit NUnit, einer bekannten Open-Source-Testbibliothek für .NET-Sprachen.

Es gibt zwei Hauptkategorien von Tests, die Sie mit UTF schreiben können: Bearbeitungsmodus und Wiedergabemodus:

Tests im Bearbeitungsmodus laufen im Unity Editor und haben Zugriff auf Editor und Spielcode. Das bedeutet, dass Sie Ihre benutzerdefinierten Editor-Erweiterungen testen oder Tests verwenden können, um Einstellungen im Editor zu ändern, und in den Wiedergabemodus wechseln können, was nützlich ist, um Inspector-Werte anzupassen und dann automatisierte Tests mit vielen verschiedenen Einstellungen durchzuführen.

Tests im Spielmodus ermöglichen es Ihnen, Ihren Spielcode während der Laufzeit zu trainieren. Tests werden in der Regel als Koroutinen mit dem Attribut [UnityTest] ausgeführt. So können Sie Code testen, der über mehrere Frames hinweg laufen kann. Standardmäßig werden Play-Modus-Tests im Editor ausgeführt, Sie können sie aber auch in einem eigenständigen Player-Build für verschiedene Zielplattformen ausführen.

automatisierte Tests
Das Third-Person-Charakter-Controller-Paket, verfügbar im Unity Asset Store

Unity Test Framework testen

Um diesem Beispiel zu folgen, müssen Sie das Paket Starter Assets – Third Person Character Controller aus dem Unity Asset Store installieren und in ein neues Projekt importieren.

automatisierte Tests
Die Datei manifest.json

Unity Test Framework einrichten

Installieren Sie UTF über Fenster > Package Manager. Suchen Sie unter dem Unity Registry im Package Manager nach Test Framework. Wählen Sie unbedingt Version 1.3.3 (die zum Zeitpunkt des Schreibens neueste Version) aus.

Sobald UTF installiert ist, öffnen Sie die Datei Packages/manifest.json mit einem Texteditor und fügen Sie einen Testables-Abschnitt nach Abhängigkeiten hinzu, wie folgt:

,
"testables": [
"com.unity.inputsystem"
]

Speichern Sie die Datei. Dies ist später nützlich, wenn Sie die Unity.InputSystem.TestFramework-Assembly zum Testen und Emulieren von Spielereingaben referenzieren müssen.

Kehren Sie zum Editor zurück und erlauben Sie die Installation der neueren Version.

automatisierte Tests
Assembly-Definitionsreferenzen im Inspector für den Third-Person-Charakter-Controller

Definitionen der Test Assembly

Klicken Sie auf Fenster > Allgemein > Test Runner, um das Fenster des Test Runner Editors anzuzeigen.

In diesem Teil des Tutorials wird der Fokus auf der Erstellung von Play-Modus-Tests liegen. Anstatt die Optionen „Test Assembly Ordner erstellen“ im Test Runner Fenster zu verwenden, erstellen Sie diese über das Projektfenster.

Klicken Sie mit der rechten Maustaste und wählen Sie „Erstellen > Testen > Tests Assembly“ aus, wenn der Stammordner Ihres Projekt-Assets markiert ist.

Es wird ein Tests-Projektordner hinzugefügt, der eine Datei Tests.asmdef (Assembly-Definition) enthält. Dies ist für Tests erforderlich, um Ihre Spielmodule und Abhängigkeiten zu referenzieren.

Der Charakter-Controller-Code wird in Tests referenziert und benötigt ebenfalls eine Assembly-Definition. Als Nächstes richten Sie einige Assembly-Definitionen und Referenzen ein, um das Testen zwischen den Modulen zu erleichtern.

Klicken Sie mit der rechten Maustaste auf den Projektordner Assets/StarterAssets/InputSystem und wählen Sie Erstellen > Assembly Definition. Nennen Sie es etwas Beschreibendes, zum Beispiel StarterAssetsInputSystem.

Wählen Sie die neue Datei StarterAssetsInputSystem.asmdef aus und fügen Sie dem Unity.InputSystem mithilfe des Inspectors eine Assembly-Definitionsreferenz hinzu. Klicken Sie auf Bewerben.

Klicken Sie mit der rechten Maustaste auf den Projektordner Assets/StarterAssets/ThirdPersonController/Scripts und wählen Sie Erstellen > Assembly Definition. Nennen Sie es etwas Beschreibendes, zum Beispiel ThirdPersonControllerMain.

Öffnen Sie wie bei der vorherigen Assembly-Definition ThirdPersonControllerMain im Inspector und wählen Sie Referenzen für:

- Unity.InputSystem

- StarterAssetsInputSystem

Klicken Sie auf Anwenden.

automatisierte Tests
Referenzen zu Assembly-Definitionen hinzufügen

Referenzen zu Assembly-Definitionen hinzufügen

Um Teile des Eingabesystems zu emulieren, müssen Sie es in Ihren Tests referenzieren. Außerdem müssen Sie den StarterAssets-Namespace in einer Assembly referenzieren, die Sie für den Third-Person-Controller-Code erstellen.

Öffnen Sie Tests.asmdef im Inspector und fügen Sie einen Verweis auf die folgenden Assembly-Definitionen hinzu:

- UnityEngine.TestRunner

- UnityEditor.TestRunner

- Unity.InputSystem

- Unity.InputSystem.TestFramework

- ThirdPersonControllerMain

Klicken Sie auf Bewerben.

  • Ihr erster Test
  • Erstellung eines C#-Testskripts
  • Bestehen Ihrer ersten Prüfung
  • Charakterbewegungstests
  • Prüfung von Sturzschäden
  • Durchführung des neuen Tests
  • Durchführung von Tests im Standalone-Player
  • Automatisierung und CI
  • Erstellung und Ausführung aufteilen
  • Durchführen eines Tests nach Aufteilung von Build und Ausführung
  • Weitere Ressourcen zum Testen in Unity
Das Build-Einstellungen-Fenster
Das Build-Einstellungen-Fenster

Ihr erster Test

Ihr erster Test behandelt einige Grundlagen zum Laden und Verschieben der Hauptfigur aus dem Third-Person-Controller-Paket.

Richten Sie zunächst das neue Projekt mit einer einfachen Testumgebungsszene und einer Prefab-Ressource für Charaktere ein.

Öffnen Sie die Szene mit dem Namen Assets/StarterAssets/ThirdPersonController/Scenes/Playground.unity und speichern Sie eine Kopie davon über das Menü Datei > Speichern unter in diesem neuen Pfad: Assets/Szenen/SimpleTesting.unity

Wenn pinkfarbene Materialien in der Spieleansicht angezeigt werden, verwenden Sie den Render Pipeline Converter, um Materialien von der integrierten Render Pipeline auf die Universal Render Pipeline (URP) zu aktualisieren. Einen schnellen Überblick finden Sie in diesem Artikel.

Erstellen Sie einen neuen Ordner in Ihrem Projekt-Assets-Ordner namens Ressourcen. Hinweis: Der Ordnername "Ressourcen" ist hier wichtig, damit die Methode Unity Resources.Load() verwendet werden kann.

Ziehen Sie das PlayerArmature GameObject in der Szenenansicht per Drag & Drop in den neuen Ressourcenordner und wählen Sie bei Aufforderung ein Original Prefab aus. Benennen Sie den Prefab-Asset-Charakter um.

Dies wird das Basischarakter-Prefab sein, das in Ihren zukünftigen Tests verwendet wird.

Entfernen Sie das PlayerArmature GameObject aus der neuen SimpleTesting-Szene und speichern Sie die Änderungen in der Szene.

Gehen Sie für den letzten Schritt der anfänglichen Testeinrichtung zu Datei > Build-Einstellungen und wählen Sie Offene Szenen hinzufügen aus, um die Szenen/einfacheTestszene zu den Build-Einstellungen hinzuzufügen.

Erstellung eines C#-Testskripts

Wählen Sie den Ordner Tests im Ordner Project Assets aus. Klicken Sie mit der rechten Maustaste und wählen Sie Create Testing > C# Test Script.

Benennen Sie die neuen Script CharacterTests. Öffnen Sie das Skript in Ihrer IDE, um es sich genauer anzusehen.

Die initiale Klassendatei enthält zwei Methoden-Stubs, die einige Testgrundlagen demonstrieren.

Als Nächstes stellen Sie sicher, dass Tests eine „testfokussierte“ Spielszene laden. Dies sollte eine Szene sein, die das notwendige Minimum enthält, um das System oder die Komponente zu testen, auf die Sie sich konzentrieren.

Aktualisieren Sie die CharacterTests-Klasse, um zwei neue Anweisungen hinzuzufügen, und implementieren Sie die InputTestFixture-Klasse:

using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;

Öffentliche Klasse CharakterTests: InputTestFixture

Fügen Sie der obersten Klasse von CharacterTests zwei private Felder hinzu:

GameObject character = Resources.Load("Character");
Tastatur;

Das Charakterfeld speichert eine Referenz auf das Charakter-Prefab, das aus dem Ressourcenordner geladen wird. Die Tastatur enthält eine Referenz auf das vom Eingabesystem bereitgestellte Eingabegerät.

Überschreiben Sie die Setup()-Methode der Basisklasse InputTestFixture, indem Sie Ihre eigene in der CharacterTests-Klasse bereitstellen:

Public Override Void Setup()
{
SceneManager.LoadScene("Scenes/SimpleTesting");
base.Setup();
keyboard = InputSystem.AddDevice();

var mouse = InputSystem.AddDevice();
Press(mouse.rightButton);
Release(mouse.rightButton);;
}

Die Setup()-Methode führt die Basisklasse Setup() aus und richtet dann Ihre eigene CharacterTests-Klasse ein, indem die Testszene geladen und das Tastatureingabegerät initialisiert wird.

Die Mauseingabe wird rein für den Third-Person-Controller hinzugefügt, um Eingaben von der simulierten/virtuellen Tastatureinrichtung zu empfangen. Das ist fast wie eine „Setzfokus“-Aktion.

Für Ihren ersten Test instanziieren Sie den Charakter aus dem Prefab und behaupten, dass er nicht Null ist. Fügen Sie der Prüfungsklasse die folgende Methode hinzu:

[Test]
public void TestPlayerInstantiation()
{
GameObject characterInstance = GameObject.Instantiate(Charakter, Vector3.zero, Quaternion.identity);
Assert.That(characterInstance, !Is.Null);
}

Während Sie dort sind, sollten Sie vielleicht die Beispielvorlagen-Testmethoden bereinigen. Entfernen Sie die Methoden CharacterTestsSimplePasses und CharacterTestsWithEnumeratorPasses.

Prüfung bestanden
Das grüne Häkchen zeigt an, dass die Prüfung erfolgreich bestanden wurde.

Bestehen Ihrer ersten Prüfung

Speichern Sie das Skript und gehen Sie zurück zum Fenster Test Runner im Editor. Markieren Sie den TestPlayerInstantiation-Test und klicken Sie auf Ausgewählt ausführen.

Das grüne Häkchen steht für eine bestandene Prüfung. Sie haben versichert, dass der Charakter aus Ressourcen geladen und in die Testszene instanziiert werden kann und dann nicht Null ist.

Vielleicht haben Sie bemerkt, dass für diesen Test die [Test]-Annotation anstelle der [UnityTest]-Annotation verwendet wurde. Das Attribut UnityTest ermöglicht es Routinen, Tests über mehrere Frames auszuführen. In diesem Fall müssen Sie nur den Charakter instanziieren und bestätigen, dass er geladen wurde.

Im Allgemeinen sollten Sie im Bearbeitungsmodus das NUnit Test-Attribut anstelle des UnityTest-Attributs verwenden, es sei denn, Sie müssen spezielle Anweisungen geben, einen Frame überspringen oder eine bestimmte Zeit im Wiedergabemodus warten.

Tests der Charakterbewegung im Spielmodus
Tests der Charakterbewegung im Spielmodus

Charakterbewegungstests

Als Nächstes verwenden Sie den UnityTest, da Sie behaupten, dass das Halten der Vorwärts-Controller-Taste den Charakter nach vorne bewegt.

Fügen Sie die unten angegebene neue Testmethode zu Ihrer CharacterTests-Klasse hinzu.

Es sind zwei neue Testhilfemethoden erschienen: Press() und Release(). Beide werden von der InputTestFixture-Basisklasse bereitgestellt und helfen Ihnen, indem Sie das Drücken und Loslassen der InputSystem-Steuerung emulieren.

Die TestPlayerMoves()-Methode geht folgendermaßen vor:

Instanziiert eine Instanz des Charakters aus dem Charakter-Prefab am Speicherort (X: 0, Y: 0, Z: 0)

Drücken Sie 1 Sekunde lang die Pfeiltaste nach oben auf der virtuellen Tastatur und lassen Sie sie dann los

Wartet noch 1 Sekunde (bis der Charakter langsamer wird und sich nicht mehr bewegt)

Zeigt an, dass sich der Charakter in einer Position auf der Z-Achse von mehr als 1,5 Einheiten bewegt hat.

Speichern Sie die Datei, kehren Sie zum Test Runner zurück und führen Sie den neuen Test aus.

Das Player Health-Skript
Das Player Health-Skript

Prüfung von Sturzschäden

Als Nächstes testen Sie ein benutzerdefiniertes MonoBehaviour-Skript, indem Sie eine einfache Player Health-Komponente hinzufügen.

Erstellen Sie ein neues Skript unter Assets/StarterAssets/ThirdPersonController/Scripts. Nennen Sie es PlayerHealth.

Öffnen Sie das Skript in Ihrer IDE und ersetzen Sie den Inhalt durch den unten angegebenen Code.

Hier wurde viel neuer Code hinzugefügt. Zusammenfassend wird in diesem Skript festgestellt, ob sich der Spielercharakter in einem fallenden Zustand befindet. Wenn der Boden einmal in einem herabfallenden Zustand getroffen wird, wird die Gesundheit des Charakters um 10 % reduziert.

Suchen Sie das Charakter-Prefab unter Assets/Ressourcen. Öffnen Sie das Prefab und fügen Sie die neue PlayerHealth-Skriptkomponente hinzu.

Als Nächstes verwenden Sie die Testszene, um festzustellen, dass die Gesundheit des Spielers nach einem Sturz von einem Vorsprung sinkt.

Mithilfe des Attributs [UnityTest] können Sie einen Play-Modus-Test schreiben, der auf Sturzschäden prüft. Bei einem Sturz von mehr als 0,2 Sekunden sollte der Spieler 0,1 f Schaden erleiden (das entspricht 10 % der maximalen Gesundheit).

In der SimpleTesting-Szene sehen Sie eine Treppe, die zu einem Vorsprung führt. Dies ist eine Testplattform zum Spawnen des Charakters auf dem PlayerHealth-Skript und Testen.

Öffnen Sie CharacterTests.cs erneut und fügen Sie eine neue Testmethode namens TestPlayerFallDamage hinzu:

[UnityTest]
public IEnumerator TestPlayerFallDamage()
{
// Spawn des Charakters in einem ausreichend hohen Bereich der Testszene
GameObject characterInstance = GameObject.Instantiate(Charakter, neuer Vector3(0f, 4f, 17.2f), Quaternion.identity);

// Holen Sie sich einen Verweis auf die PlayerHealth-Komponente und behaupten Sie, dass Sie aktuell bei voller Gesundheit sind (1f)
var characterHealth = characterInstance.GetComponent();
Assert.That(characterHealth.Health, Is.EqualTo(1f));

// Von der Kante gehen und auf den Sturz warten
Press(keyboard.upArrowKey);
yield return new WaitForSeconds(0.5f);
Release(keyboard.upArrowKey);
ergeben neuen WaitForSeconds(2f);

// Versichern, dass 1 Gesundheitspunkt aufgrund des Sturzschadens verloren gegangen ist
Assert.That(characterHealth.Health, Is.EqualTo(0.9f));
}

Sie müssen auch einen verwendenden Verweis auf den StarterAssets-Namespace ganz oben in der Klassendatei hinzufügen:

StarterAssets verwenden;

Der obige Test folgt einem typischen Anordnungs-, Handlungs-, Durchsetzungsmuster, das häufig bei Tests vorkommt:

  • Der Abschnitt Anordnen einer Einheitstestmethode initialisiert Objekte und legt den Wert der Daten fest, die an die zu testende Methode übergeben werden.
  • Der Abschnitt Act ruft das zu testende Verfahren mit den angeordneten Parametern auf. In diesem Fall erfolgt der Aufruf des zu testenden Verfahrens durch eine physikalische Interaktion, wenn der Spieler nach einem Sturz auf den Boden trifft.

Im Abschnitt „Assert“ wird überprüft, ob sich die Wirkung der zu testenden Methode wie erwartet verhält.

Als Nächstes testen Sie ein benutzerdefiniertes MonoBehaviour-Skript, indem Sie eine einfache Player Health-Komponente hinzufügen.

Erstellen Sie ein neues Skript unter Assets/StarterAssets/ThirdPersonController/Scripts. Nennen Sie es PlayerHealth.

Öffnen Sie das Skript in Ihrer IDE und ersetzen Sie den Inhalt durch den unten angegebenen Code.

Hier wurde viel neuer Code hinzugefügt. Zusammenfassend wird in diesem Skript festgestellt, ob sich der Spielercharakter in einem fallenden Zustand befindet. Wenn der Boden einmal in einem herabfallenden Zustand getroffen wird, wird die Gesundheit des Charakters um 10 % reduziert.

Suchen Sie das Charakter-Prefab unter Assets/Ressourcen. Öffnen Sie das Prefab und fügen Sie die neue PlayerHealth-Skriptkomponente hinzu.

Als Nächstes verwenden Sie die Testszene, um festzustellen, dass die Gesundheit des Spielers nach einem Sturz von einem Vorsprung sinkt.

Mithilfe des Attributs [UnityTest] können Sie einen Play-Modus-Test schreiben, der auf Sturzschäden prüft. Bei einem Sturz von mehr als 0,2 Sekunden sollte der Spieler 0,1 f Schaden erleiden (das entspricht 10 % der maximalen Gesundheit).

In der SimpleTesting-Szene sehen Sie eine Treppe, die zu einem Vorsprung führt. Dies ist eine Testplattform zum Spawnen des Charakters auf dem PlayerHealth-Skript und Testen.

Öffnen Sie CharacterTests.cs erneut und fügen Sie eine neue Testmethode namens TestPlayerFallDamage hinzu:

[UnityTest]
public IEnumerator TestPlayerFallDamage()
{
// Spawn des Charakters in einem ausreichend hohen Bereich der Testszene
GameObject characterInstance = GameObject.Instantiate(Charakter, neuer Vector3(0f, 4f, 17.2f), Quaternion.identity);

// Holen Sie sich einen Verweis auf die PlayerHealth-Komponente und behaupten Sie, dass Sie aktuell bei voller Gesundheit sind (1f)
var characterHealth = characterInstance.GetComponent();
Assert.That(characterHealth.Health, Is.EqualTo(1f));

// Von der Kante gehen und auf den Sturz warten
Press(keyboard.upArrowKey);
yield return new WaitForSeconds(0.5f);
Release(keyboard.upArrowKey);
ergeben neuen WaitForSeconds(2f);

// Versichern, dass 1 Gesundheitspunkt aufgrund des Sturzschadens verloren gegangen ist
Assert.That(characterHealth.Health, Is.EqualTo(0.9f));
}

Sie müssen auch einen verwendenden Verweis auf den StarterAssets-Namespace ganz oben in der Klassendatei hinzufügen:

StarterAssets verwenden;

Der obige Test folgt einem typischen Anordnungs-, Handlungs-, Durchsetzungsmuster, das häufig bei Tests vorkommt:

Der Abschnitt Anordnen einer Einheitstestmethode initialisiert Objekte und legt den Wert der Daten fest, die an die zu testende Methode übergeben werden.

Der Abschnitt Act ruft das zu testende Verfahren mit den angeordneten Parametern auf. In diesem Fall erfolgt der Aufruf des zu testenden Verfahrens durch eine physikalische Interaktion, wenn der Spieler nach einem Sturz auf den Boden trifft.

Im Abschnitt „Assert“ wird überprüft, ob sich die Wirkung der zu testenden Methode wie erwartet verhält.

Test Runner – Durchführung von Tests
Ein Test, um sicherzustellen, dass ein Charakter wie vorgesehen ins Spiel fällt, einschließlich der korrekten Schadenshöhe

Durchführung des neuen Tests

Führen Sie im Editor den neuen Test aus. Beim Laufen im Spielmodus sehen Sie, wie der Charakter von der Kante geht, fällt (die Schwelle von 0,2 Sekunden überschreitet, um einen Fall zu kategorisieren) und Schaden nimmt, nachdem er auf dem Boden aufgeschlagen ist.

Tests dienen nicht nur dazu zu testen, ob Codeänderungen die Funktionalität nicht beeinträchtigen, sondern können auch als Dokumentation oder Hinweise dienen, die Entwicklern helfen, bei der Anpassung der Einstellungen an andere Aspekte des Spiels zu denken.

So wird ein Test in einem Standalone-Spieler-Build geschaltet
So wird ein Test in einem Standalone-Spieler-Build geschaltet

Durchführung von Tests im Standalone-Player

Wie bereits erwähnt, werden Play-Modus-Tests im Test Runner standardmäßig im Play-Modus mit dem Unity Editor ausgeführt. Sie können sie auch so ändern, dass sie unter einem eigenständigen Player laufen.

Verwenden Sie die Dropdown-Auswahl „Standort ausführen“ im Test Runner Fenster, um Tests auf Standalone Player Builds umzustellen.

Automatisierung und CI

Sobald Sie mit der Erstellung einer Suite von Tests begonnen haben, werden diese nach Abschluss der Builds automatisch ausgeführt. Automatisierte Einheiten- und Integrationstests, die nach dem Build ausgeführt werden, sind nützlich, um Regressionen oder Fehler so früh wie möglich zu erkennen. Sie können auch als Teil eines automatisierten Remote-Build-Systems in der Cloud ausgeführt werden.

Erstellung und Ausführung aufteilen

Oftmals möchten Sie die Testlaufergebnisse in einem benutzerdefinierten Format erfassen, damit die Ergebnisse mit einem breiteren Publikum geteilt werden können. Um Testergebnisse außerhalb des Unity Editors zu erfassen, müssen Sie die Build- und Ausführungsprozesse aufteilen.

Erstellen Sie ein neues Skript in Ihrem Projektordner Tests mit dem Namen SetupPlaymodeTestPlayer.

Die SetupPlaymodeTestPlayer-Klasse implementiert die ITestPlayerBuildModifier-Schnittstelle. Damit überschreiben Sie die ModifyOptions-Methode, die die Player-Optionen des Builds empfängt und es Ihnen ermöglicht, sie zu ändern.

System.IO verwenden;
UnityEditor verwenden;
using UnityEditor.TestTools;

[Montage: TestPlayerBuildModifier(typeof(SetupPlaymodeTestPlayer))]
öffentlicher Kurs SetupPlaymodeTestPlayer : ITestPlayerBuildModifier
{
public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
{
playerOptions.options &= ~(BuildOptions.AutoRunPlayer | BuildOptions.ConnectToHost);

var buildLocation = Path.GetFullPath("TestPlayers");
var fileName = Path.GetFileName(playerOptions.locationPathName);
if (!string.IsNullOrEmpty(fileName))
buildLocation = Path.Combine(buildLocation, Dateiname);
playerOptions.locationPathName = buildLocation;

PlayerOptions zurückgeben;
}
}

Dieses benutzerdefinierte Player Build-Modifiziererskript macht Folgendes, wenn Tests im Play-Modus ausgeführt werden (Ausführungsort: On Player):

Deaktiviert die automatische Ausführung für gebaute Spieler und überspringt die Player-Option, die versucht, eine Verbindung zum Host herzustellen, auf dem sie ausgeführt wird.

Ändert den Build-Pfad in einen dedizierten Pfad innerhalb des Projekts (TestPlayer)

Mit diesem Abschluss können Sie jetzt erwarten, dass Builds sich im Ordner TestPlayers befinden, sobald sie mit der Erstellung fertig sind. Damit sind die Build-Änderungen abgeschlossen und die Verbindung zwischen Build und Ausführung wird getrennt.

Als Nächstes implementieren Sie die Ergebnisberichterstattung. Dadurch können Sie die Testergebnisse an einen benutzerdefinierten Ort schreiben, der für die automatische Generierung und Veröffentlichung von Berichten bereit ist.

Erstellen Sie ein neues Skript in Ihrem Tests-Projektordner namens ResultSerializer (unten bereitgestellt). Diese Klasse verwendet eine Assembly-Referenz auf TestRunCallback und implementiert die ITestRunCallback-Schnittstelle.

Diese Implementierung von ITestRunCallback enthält eine benutzerdefinierte RunFinished-Methode, die ein Player-Build mit Tests einrichtet, um die Testergebnisse in eine XML-Datei namens testresults.xml auszuschreiben.

Code
Die Ergebnisausgaben finden Sie in der Datei testresults.xml auf dem Speicherort Application.persistentDataPath Ihrer Plattform.

Durchführen eines Tests nach Aufteilung von Build und Ausführung

Durch die Kombination von SetupPlaymodeTestPlayer.cs und ResultSerializer.cs werden Build- und Ausführungsprozesse jetzt aufgeteilt. Durchlaufende Tests geben die Ergebnisse an testresults.xml aus, das sich auf dem Application.persistentDataPath-Standort der Player-Plattform befindet.

Um einige der Typen in diesen Hook-Klassen zu verwenden, müssen Sie einen zusätzlichen Verweis auf Tests.asmdef hinzufügen. Aktualisieren Sie es, um die Assembly-Definitionsreferenz UnityEditor.UI.EditorTests hinzuzufügen.

Das Ausführen der Tests im Player liefert nun eine Player-Build-Ausgabe unter Ihrem Projekt im Ordner TestPlayers und eine Datei testresults.xml im Speicherort Application.persistentDataPath.

Covergrafik E-Book

Weitere Ressourcen zum Testen in Unity

Kurs Unity Test Framework

Das Paket Test Framework umfasst einen Testkurs mit Beispielübungen, mit denen Sie mehr über das Testen mit Unity lernen können. Greifen Sie unbedingt die Projektdateien für den Kurs mit dem Package Manager.

Verwendung von Paketmanager-Paketen: Unity Registry > Test Framework, suchen Sie die Dropdown-Liste Muster und importieren Sie die Kursübungen.

Die Übungen werden in Ihr Projekt importiert und befinden sich unter Assets/Muster/Test Framework. Jedes Muster enthält eine Übungsmappe, unter der Sie arbeiten können, sowie eine Lösung, mit der Sie Ihre eigene Arbeit im Laufe der Zeit vergleichen können.

Qualitätssicherung mit UTF

In diesem Unitye Copenhagen Vortrag über UTF wird näher darauf eingegangen und es werden einige weitere interessante Anwendungsfälle für die Testanpassung aufgezeigt. Probieren Sie es unbedingt aus, um zu sehen, was noch möglich ist.

Fehlerbehebung in Unity

Beschleunigen Sie Ihren Debugging-Workflow in Unity mit Artikeln zu:

- Microsoft Visual Studio 2022

- Microsoft Visual Studio Code

Fortgeschrittene technische E-Books

Unity bietet eine Reihe erweiterter Anleitungen, die professionelle Entwickler bei der Optimierung von Spielcode unterstützen. Erstellen Sie eine C#-Anleitung: Schreiben Sie saubereren Code, der skaliert, und stellen Sie Ratschläge von Branchenexperten zusammen, wie Sie eine Codestil-Anleitung erstellen, um Ihrem Team zu helfen, eine saubere, lesbare und skalierbare Codebasis zu entwickeln.

Ein weiterer beliebter Leitfaden unserer Benutzer sind mehr als 70 Tipps zur Produktivitätssteigerung mit Unity. Es ist vollgepackt mit zeitsparenden Tipps, um Ihren täglichen, aggregierten Workflow mit Unity 2020 LTS zu verbessern, einschließlich Tipps, die selbst erfahrene Entwickler verpasst haben könnten.

Dokumentation

Entdecken Sie die neueste TestRunner API weiter, erfahren Sie mehr über andere UTF Custom-Attribute und entdecken Sie weitere Lebenszyklen, die Sie mit der UTF-Dokumentation besprechen können.

Alle fortgeschrittenen E-Books und Artikel von Unity finden Sie im Hub für bewährte Verfahren von Unity.