Annak biztosítása érdekében, hogy az MRTK megbízható legyen, az MRTK tesztkészlettel rendelkezik annak biztosítására, hogy a kód módosításai ne lépjenek vissza a meglévő viselkedésre. A nagy kódbázisban, például az MRTK-ban való jó tesztlefedettség elengedhetetlen a stabilitás és a megbízhatóság érdekében a módosítások végrehajtásakor.
Lekéréses kérelem elküldése előtt győződjön meg arról, hogy:
Futtassa a teszteket helyileg, hogy a módosítások ne legyenek visszafejtve a meglévő viselkedésre (a PRS-ek elvégzése nem engedélyezett, ha a tesztek sikertelenek).
Hiba kijavítása esetén írjon egy tesztet a javítás teszteléséhez, és győződjön meg arról, hogy a jövőbeli kódmódosítások nem törik meg újra.
Ha ír egy funkciót, írjon új teszteket, hogy megakadályozza a közelgő kódmódosításokat, amelyek megszegik ezt a funkciót.
A playmode-tesztek jelenleg a Unity 2018.4-ben futnak, és a Unity más verzióiban sikertelenek lehetnek
Tesztek futtatása
Unity-szerkesztő
A Unity Tesztfuttató a Windows>Általános>tesztfuttató területén található, és megjeleníti az összes elérhető MRTK-lejátszási és szerkesztési módú tesztet.
Parancssor
A teszteket a címen Scripts\test\run_playmode_tests.ps1található PowerShell-szkript is futtathatja. Ez pontosan úgy futtatja a playmode teszteket, ahogy a githubon / CI-n hajtják végre őket (lásd alább), és kinyomtatja az eredményeket. Íme néhány példa a szkript futtatására
Futtassa a teszteket a H:\mrtk.dev helyen található projekten a Unity 2018.4-gyel (például Unity 2018.4.26f1)
A playmode tesztek többször is futtathatók a run_repeat_tests.ps1 szkripten keresztül. Az összes használt run_playmode_tests.ps1 paraméter használható.
ps
.\run_repeat_tests.ps1 -Times5
Lekéréses kérelem érvényesítése
Az MRTK CI minden konfigurációban létrehozza az MRTK-t, és futtatja az összes szerkesztési és lejátszási módú tesztet. A CI akkor aktiválható, ha megjegyzést küld a github pr-hez /azp run mrtk_pr , ha a felhasználó rendelkezik megfelelő jogosultságokkal. A CI-futtatások a kérelem "ellenőrzések" lapján tekinthetők meg.
A pr-t csak akkor lehet a főbe egyesíteni, ha az összes teszt sikeresen le lett adva.
Stressztesztek / tömeges tesztek
Néha a tesztek csak időnként hiúsulnak meg, ami zavaró lehet a hibakereséshez.
Ha több tesztfuttatást szeretne helyileg futtatni, módosítsa a megfelelő tesztszkripteket. A következő Python-szkriptnek kényelmesebbé kell tennie ezt a forgatókönyvet.
Futtassa az alábbiakat egy parancssorból (a PowerShell használata ajánlott)
PowerShell
cd scripts\tests
# Repeat the test 5 times. Default is 100
python .\generate_repeat_tests.py -n5 -t MyTest
Másolja és illessze be a kimenetet a tesztfájlba. A következő szkript több teszt sorozatban való futtatására használható:
PowerShell
cd scripts\tests
# Repeat the test 5 times. Default is 100
python .\generate_repeat_tests.py -n5 -t MyTest MySecondTest
Az új tesztfájlnak most már tartalmaznia kell
c#
[UnityTest]
public IEnumerator A1MyTest0(){ yieldreturnMyTest();}
[UnityTest]
public IEnumerator A2MyTest0(){ yieldreturnMyTest();}
[UnityTest]
public IEnumerator A3MyTest0(){ yieldreturnMyTest();}
[UnityTest]
public IEnumerator A4MyTest0(){ yieldreturnMyTest();}
[UnityTest]
public IEnumerator MyTest() {...}
Nyissa meg a tesztfuttatót, és figyelje meg azokat az új teszteket, amelyek most már ismételten hívhatók.
Tesztek írása
Az új kódhoz kétféle teszt adható hozzá
Lejátszási mód tesztjei
Módtesztek szerkesztése
Lejátszási mód tesztjei
Az MRTK lejátszási módú tesztjei képesek tesztelni, hogy az új funkció hogyan reagál a különböző bemeneti forrásokra, például a kezekre vagy a szemekre.
Az új lejátszási módú tesztek örökölhetik a BasePlayModeTesteket , vagy az alábbi csontváz használható.
Új lejátszási módú teszt létrehozása:
Navigáljon az Eszközök > MRTK-tesztek >> PlayModeTests eleméhez
Kattintson a jobb gombbal, tesztelési > C# tesztszkript létrehozása >
Cserélje le az alapértelmezett sablont az alábbi csontvázra
c#
#if !WINDOWS_UWP// When the .NET scripting backend is enabled and C# projects are built// The assembly that this file is part of is still built for the player,// even though the assembly itself is marked as a test assembly (this is not// expected because test assemblies should not be included in player builds).// Because the .NET backend is deprecated in 2018 and removed in 2019 and this// issue will likely persist for 2018, this issue is worked around by wrapping all// play mode tests in this check.using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
using NUnit.Framework;
using System;
using System.Collections;
using System.Linq;
using UnityEngine;
using UnityEngine.TestTools;
namespaceMicrosoft.MixedReality.Toolkit.Tests
{
classExamplePlayModeTests
{
// This method is called once before we enter play mode and execute any of the tests// do any kind of setup here that can't be done in playmodepublicvoidSetup()
{
// eg installing unity packages is only possible in edit mode// so if a test requires TextMeshPro we will need to check for the package before entering play mode
PlayModeTestUtilities.InstallTextMeshProEssentials();
}
// Do common setup for each of your tests here - this will be called for each individual test after entering playmode// Note that this uses UnitySetUp instead of [SetUp] because the init function needs to await a frame passing// to ensure that the MRTK system has had the chance to fully set up before the test runs.
[UnitySetUp]
public IEnumerator Init()
{
// in most play mode test cases you would want to at least create an MRTK GameObject using the default profile
TestUtilities.InitializeMixedRealityToolkit(true);
yieldreturnnull;
}
// Destroy the scene - this method is called after each test listed below has completed// Note that this uses UnityTearDown instead of [TearDown] because the init function needs to await a frame passing// to ensure that the MRTK system has fully torn down before the next test setup->run cycle starts.
[UnityTearDown]
public IEnumerator TearDown()
{
PlayModeTestUtilities.TearDown();
yieldreturnnull;
}
#region Tests///<summary>/// Skeleton for a new MRTK play mode test.///</summary>
[UnityTest]
public IEnumerator TestMyFeature()
{
// ----------------------------------------------------------// EXAMPLE PLAY MODE TEST METHODS// ----------------------------------------------------------// Getting the input system// var inputSystem = PlayModeTestUtilities.GetInputSystem();// Creating a new test hand for input// var rightHand = new TestHand(Handedness.Right);// yield return rightHand.Show(new Vector3(0, 0, 0.5f));// Moving the new test hand// We are doing a yield return here because moving the hand to a new position// requires multiple frames to complete the action.// yield return rightHand.MoveTo(new Vector3(0, 0, 2.0f));// Getting a specific pointer from the hand// var linePointer = PointerUtils.GetPointer<LinePointer>(Handedness.Right);// Assert.IsNotNull(linePointer);// ---------------------------------------------------------// Your new test hereyieldreturnnull;
}
#endregion
}
}
#endif
Módtesztek szerkesztése
A szerkesztési módú teszteket a Unity szerkesztési módban hajtja végre, és a Mixed Reality Toolkit-adattár MRTK-tesztek>>EditModeTests mappájában adhatja hozzá.
Új teszt létrehozásához a következő sablon használható:
c#
// Copyright (c) Microsoft Corporation.// Licensed under the MIT License.using NUnit.Framework;
namespaceMicrosoft.MixedReality.Toolkit.Tests
{
classEditModeExampleTest
{
[Test]
/// the name of this method will be used as test name in the unity test runnerpublicvoidTestEditModeExampleFeature()
{
}
}
}
Elnevezési konvenciók tesztelése
A teszteket általában a tesztelt osztály vagy a tesztelési forgatókönyv alapján kell elnevezni.
Például egy tesztelendő osztályt:
Ennek az a célja, hogy egyértelmű módon állapítsa meg az egyes osztályok megfelelő tesztosztályait, ha létezik ilyen tesztosztály.
A forgatókönyvalapú tesztek elhelyezése kevésbé definiált – ha a teszt a teljes bemeneti rendszert gyakorolja, például érdemes lehet egy "InputSystem" mappába helyezni a megfelelő szerkesztési módban vagy lejátszási mód tesztmappájában.
Szkriptikonok tesztelése
Új teszt hozzáadásakor módosítsa a szkriptet úgy, hogy a megfelelő MRTK ikon legyen. Erre egy egyszerű MRTK-eszköz áll rendelkezésre:
Lépjen a Mixed Reality Eszközkészlet menüelemre.
Kattintson a Segédprogramok, majd a Frissítés, majd az Ikonok elemre.
Kattintson a Tesztek gombra, és a frissítő automatikusan elindul, és frissíti az ikonokat hiányzó tesztszkripteket.
MRTK utility metódusok
Ez a szakasz az MRTK-tesztek írásakor gyakran használt kódrészleteket/metódusokat mutatja be.
Két segédprogramosztály segíti az MRTK beállítását és az összetevőkkel való interakció tesztelését az MRTK-ban
A TestUtilities a következő módszereket biztosítja az MRTK-jelenet és a GameObjects beállításához:
c#
/// creates the mrtk GameObject and sets the default profile if passed param is true
TestUtilities.InitializeMixedRealityToolkit()
/// creates an empty scene prior to adding the mrtk GameObject to it
TestUtilities.InitializeMixedRealityToolkitAndCreateScenes();
/// sets the initial playspace transform and camera position
TestUtilities.InitializePlayspace();
/// destroys previously created mrtk GameObject and playspace
TestUtilities.ShutdownMixedRealityToolkit();
Tekintse meg ezen util osztályok API-dokumentációját TestUtilities és PlayModeTestUtilities további módszereit, mivel azokat rendszeresen bővítjük, miközben új teszteket adunk hozzá az MRTK-hoz.
A C#-alkalmazások tesztelését a Visual Studio tesztelési eszközeivel kezdheti el. Megtudhatja, hogyan írhat teszteket, használhatja a Test Explorert, hozhat létre tesztcsomagokat, és alkalmazhatja a piros, zöld, újrabontási mintát a kód írásához.