Támogatott keretrendszerek
Milyen tesztelési keretrendszereket támogat az Élő egység tesztelése, és melyek a minimálisan támogatott verziók?
Az élő egységtesztelés az alábbi táblázatban felsorolt három népszerű egységtesztelési keretrendszerrel működik. Az adapterek és keretrendszerek minimálisan támogatott verziója is szerepel a táblázatban. Az egységtesztelési keretrendszerek mind elérhetők a NuGet.org.
Tesztelési keretrendszer | Visual Studio Adapter minimális verziója | Keretrendszer minimális verziója |
---|---|---|
xUnit.net | xunit.runner.visualstudio 2.2.0-beta3-build1187-es verzió | xunit 1.9.2 |
NUnit | NUnit3TestAdapter 3.7.0-s verzió | NUnit 3.5.0-s verzió |
MSTest | MSTest.TestAdapter 1.1.4-preview | MSTest.TestFramework 1.0.5-preview |
Ha régebbi, Microsoft.VisualStudio.QualityTools.UnitTestFramework
hivatkozó MSTest-alapú tesztprojektje van, és nem szeretne áttérni az újabb MSTest NuGet-csomagokra, frissítsen a Visual Studio 2019-re vagy a Visual Studio 2017-re.
.NET Core-támogatás
Működik az élő egység tesztelése a .NET Core-nal?
Igen. Az élő egységtesztelés a .NET Core-jal és a .NET-keretrendszerrel működik.
Konfiguráció
Miért nem működik az Élő egység tesztelése, amikor bekapcsolom?
A Kimeneti ablaknak (amikor az Élő egység tesztelése legördülő lista van kiválasztva) meg kell mondania, hogy miért nem működik az élő egység tesztelése. Előfordulhat, hogy az élő egység tesztelése az alábbi okok valamelyike miatt nem működik:
Ha a megoldás projektjei által hivatkozott NuGet-csomagok nem lettek visszaállítva, az élő egység tesztelése nem fog működni. A megoldás explicit buildjének végrehajtása vagy a NuGet-csomagok visszaállítása a megoldásban az élő egység tesztelésének bekapcsolása előtt meg kell oldania ezt a problémát.
Ha MSTest-alapú teszteket használ a projektjeiben, távolítsa el a
Microsoft.VisualStudio.QualityTools.UnitTestFramework
hivatkozását, és adjon hozzá hivatkozásokat a legújabb MSTest NuGet-csomagokra,MSTest.TestAdapter
(legalább 1.1.11-es verzió szükséges) ésMSTest.TestFramework
(legalább 1.1.11-es verzió szükséges). További információt az Live Unit Testing használata a Visual Studióban című cikk "Támogatott tesztelési keretrendszerek" című szakaszában talál.A megoldásban legalább egy projektnek NuGet-referenciával vagy közvetlen hivatkozással kell rendelkeznie az xUnit, az NUnit vagy az MSTest tesztelési keretrendszerre. A projektnek egy megfelelő Visual Studio-tesztadapter NuGet-csomagra is hivatkoznia kell.
Miért nem épül a projektem?
A buildelési hibák a Kimenet ablakba kerülnek, amikor az Élő egység tesztelése legördülő lista ki van választva. A telepítővarázslójának helytelen konfigurációja néhány gyakori problémát okoz, amelyek buildelési problémákat okozhatnak az élő egység tesztelésében.
Ha a Munkaterület gyökér tulajdonság túl hosszú, lehetséges, hogy a build sikertelen lesz, mert a kivételek azt jelzik, hogy az elérési út túl hosszú.
Ha a Adattár gyökér tulajdonsága nem az adattár gyökerére mutat, a munkaterület nem megfelelő fájlkészlettel lesz feltöltve.
Git-adattárak esetén a Fájlok kizárása tulajdonság általában elkerüli a gitignore fájlban megadott fájlok másolását. Lehetőség van azonban olyan fájlok beadására a git-adattárban, amelyeket figyelmen kívül hagy, vagy futtathat olyan eszközöket, amelyek automatikusan létrehoznak fájlokat, de ezek nem jönnek létre a build során. Ezekben az esetekben a "<Egyéni>" lehetőséget kell választani, és olyan egyéni szabálykészletet kell választania, amely csak az összetevők mappáit listázja.
A korábban ismertetett problémák mellett az alábbi projektkonfigurációk nem feltétlenül megfelelően épülnek fel.
Ha a projektfüggőségek globális megoldáskonfigurációként vannak megadva, és nem az egyes projektekhez
ProjectReferences
, az élő egység tesztelése végül helytelen projektkészletet hozhat létre. A probléma megoldásához adjon hozzá explicit hivatkozásokat a projektek között.Amíg ki nem választ egy élő egységtesztelési lejátszási listát, az Élő egység tesztelése nem hoz létre projekteket. A probléma megoldásához adjon meg néhány tesztet az Élő egység tesztelése lejátszási listához.
Ha MSTest-alapú teszteket használ a projektjeiben, távolítsa el a
Microsoft.VisualStudio.QualityTools.UnitTestFramework
hivatkozását, és adjon hozzá hivatkozásokat a legújabb MSTest NuGet-csomagokra,MSTest.TestAdapter
(legalább 1.1.11-es verzió szükséges) ésMSTest.TestFramework
(legalább 1.1.11-es verzió szükséges). További információ: Támogatott tesztelési keretrendszerek.A megoldásban legalább egy projektnek NuGet-referenciával vagy közvetlen hivatkozással kell rendelkeznie az xUnit, az NUnit vagy az MSTest tesztelési keretrendszerre. A projektnek egy megfelelő Visual Studio-tesztadapter NuGet-csomagra is hivatkoznia kell. A Visual Studio tesztadapterre egy .runsettings fájlon keresztül is hivatkozhat. A .runsettings fájlnak az alábbi példához hasonló bejegyzéssel kell rendelkeznie:
<RunSettings>
<RunConfiguration>
<TestAdaptersPaths>path-to-your-test-adapter</TestAdaptersPaths>
</RunConfiguration>
</RunSettings>
Támogatja a Live Unit Testing a forrásgenerátorprojekteket?
Az élő egység tesztelése nem tudja a forrásgenerátor-projekteket rendszerállapottal létrehozni. Mivel a C#-fordító hogyan állítja be a forrásgenerátorok szerelvénybetöltését, a forrásgenerátor-projektek rendszerállapot-összeállítással történő létrehozásának kísérlete nem tölti be az élő egységtesztelő szerelvényeket.
Beállíthatja <ExcludeFromCodeCoverage>true</ExcludeFromCodeCoverage>
tulajdonságot a forrásgenerátor csproj-fájljaiban, hogy ezeket a projekteket a Live Unit Testingben hozza létre.
Hogyan hárítható el a "Nem sikerült betölteni a fájl vagy a szerelvény "Microsoft.Bcl.AsyncInterfaces" hibát?
A Live Unit Testing a saját folyamatán belül futtatja a buildet teljesítménybeli okokból.
Ha ez a különálló összeállítási folyamat hibát okoz, beállíthatja a <UseInProcMSBuildNode>false</UseInProcMSBuildNode>
a .lutconfig fájlra, hogy az összes build az MSBuild folyamatban történjen.
Miért nem futnak a tesztek?
Gyakori probléma, hogy a rendszer nem minden fájlt másol át a tesztmappába. Előfordulhat, hogy néhány élő egység tesztelési teszt függőségét elemeket kell hozzáadnia a csproj fájlok.
Egy másik probléma az időtúllépés. Mivel az élő egység tesztelése határozatlan ideig futtat teszteket, automatikusan megszakítja a futtatásokat, ha a tesztek túl sokáig futnak. Növelheti az időtúllépést a projekt varázsló.
Helytelen lefedettség a frissítés után
Miért jelenik meg helytelen lefedettség az Élő egység tesztelése szolgáltatásban, miután frissítette a Visual Studio-projektekben hivatkozott tesztadaptert a támogatott verzióra?
Ha a megoldásban több projekt hivatkozik a NuGet tesztadaptercsomagra, mindegyiket frissíteni kell a támogatott verzióra.
Győződjön meg arról, hogy az MSBuild .props a tesztadaptercsomagból importált fájl is megfelelően frissült. Ellenőrizze az importálás NuGet-csomagjának verzióját/elérési útját, amely általában a projektfájl tetején található, az alábbiakhoz hasonlóan:
<Import Project="..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props')" />
Buildek testreszabása
Testre szabhatom az élő egységtesztelési buildeket?
Ha a megoldáshoz egyéni lépések szükségesek a "normál" nem eszközalapú buildeléshez nem szükséges rendszerállapot -összeállításhoz (élő egységtesztelés), akkor kódot adhat hozzá a projekthez, vagy .targets fájlokat, amelyek ellenőrzik a BuildingForLiveUnitTesting
tulajdonságot, és egyéni létrehozás előtti/utáni lépéseket hajtanak végre. Dönthet úgy is, hogy eltávolít bizonyos buildelési lépéseket (például a csomagok közzétételét vagy generálását), vagy a buildelési lépéseket (például az előfeltételek másolását) egy élő egységtesztelési buildhez a projekttulajdonság alapján. A build ezen tulajdonság alapján történő testreszabása semmilyen módon nem változtatja meg a normál buildet, és csak az élő egységtesztelési buildekre van hatással.
Lehet például egy cél, amely NuGet-csomagokat állít elő egy normál build során. Valószínűleg nem szeretné, hogy a NuGet-csomagok minden szerkesztés után létre legyenek hozva. Az Élő egység tesztelése buildben az alábbihoz hasonló módon tilthatja le ezt a célt:
<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' != 'true'">
<Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>
A Test Explorer és az élő egység tesztelése
Miben különbözik a Tesztkezelő ablak tesztjeinek futtatása az élő egységtesztelésben futtatott tesztektől?
Több különbség is van:
Az Test Explorer ablak tesztjeinek futtatása vagy hibakeresése normál bináris fájlokat futtat, míg az Élő egység tesztelése eszközalapú bináris fájlokat futtat. Ha eszközalapú bináris fájlokat szeretne hibakeresésre használni, adjon hozzá egy Debugger.Launch metódushívást a tesztmetódusban, amely miatt a hibakereső elindul a metódus végrehajtásakor (beleértve az élő egység tesztelése által végzett végrehajtást is), majd csatolhatja és hibakeresésre használhatja a rendszerállapotú bináris fájlt. Reméljük azonban, hogy a rendszerezés átlátható a legtöbb felhasználói forgatókönyv esetében, és nem kell hibakeresést végeznie a rendszerezett bináris fájlokban.
Az élő egység tesztelése nem hoz létre új alkalmazástartományt a tesztek futtatásához, de az Test Explorer ablakban futtatott tesztek új alkalmazástartományt hoznak létre.
Az élő egységtesztelés egymás után futtatja a teszteket az egyes tesztszerelvényekben. A Test Explorer-ben több tesztet is futtathat párhuzamosan.
Test Explorer alapértelmezés szerint egyszálas lakásban (STA) futtat teszteket, míg az Élő egység tesztelése többszálú lakásban (MTA) futtat teszteket. Az MSTest-tesztek élő egységtesztelésben való futtatásához a tesztelési módszert vagy az azt tartalmazó osztályt a
MSTest.STAExtensions 1.0.3-beta
NuGet-csomagban található<STATestMethod>
vagy<STATestClass>
attribútummal díszítse. NUnit esetén a tesztmetódus<RequiresThread(ApartmentState.STA)>
attribútummal, xUnit esetén pedig a<STAFact>
attribútummal legyen díszítve.
Tesztek kizárása
Hogyan zárhatom ki a teszteket az élő egységtesztelésben való részvételből?
A felhasználóspecifikus beállításról a Live Unit Testing használata a Visual Studióban című cikk "Tesztprojektek és tesztelési módszerek belefoglalása és kizárása" című szakaszában olvashat. A tesztek belefoglalása vagy kizárása akkor hasznos, ha egy adott szerkesztési munkamenethez egy adott tesztkészletet szeretne futtatni, vagy meg szeretné őrizni a saját személyes beállításait.
Megoldásspecifikus beállítások esetén a System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute attribútumot programozott módon alkalmazhatja, hogy kizárja a metódusokat, tulajdonságokat, osztályokat vagy struktúrákat az élő egységtesztelésből. Emellett beállíthatja, hogy a <ExcludeFromCodeCoverage>
tulajdonság true
legyen a projektfájlban, hogy kizárja a teljes projektet a rendszerállapotból. Az élő egység tesztelése továbbra is futtatja azokat a teszteket, amelyek még nem lettek rendszerezve, de a lefedettségük nem lesz vizualizálva.
Azt is ellenőrizheti, hogy a Microsoft.CodeAnalysis.LiveUnitTesting.Runtime
az aktuális alkalmazástartományba van-e betöltve, és miért tiltja le a teszteket. Az xUnittal például az alábbihoz hasonló műveleteket hajthat végre:
[ExcludeFromCodeCoverage]
public class SkipLiveFactAttribute : FactAttribute
{
private static bool s_lutRuntimeLoaded = AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name ==
"Microsoft.CodeAnalysis.LiveUnitTesting.Runtime");
public override string Skip => s_lutRuntimeLoaded ? "Test excluded from Live Unit Testing" : "";
}
public class Class1
{
[SkipLiveFact]
public void F()
{
Assert.True(true);
}
}
Folyamatos buildek
Miért készíti a Live Unit tesztelése folyamatosan a megoldásomat, még akkor is, ha nem végezek módosításokat?
A megoldás akkor is létrehozható, ha nem végez módosításokat, ha a buildelési folyamat olyan forráskódot hoz létre, amely a megoldás részét képezi, és a build célfájljai nem rendelkeznek megfelelő bemenetekkel és kimenetekkel. A célokat meg kell adni a bemenetek és kimenetek listájának, hogy az MSBuild elvégezhesse a megfelelő up-todátumellenőrzést, és megállapíthassa, hogy szükség van-e új buildre.
Az Élő egység tesztelése minden alkalommal elindít egy buildet, amikor azt észleli, hogy a forrásfájlok megváltoztak. Mivel a megoldás felépítése forrásfájlokat hoz létre, az Élő egység tesztelése egy végtelen buildelési ciklusba kerül. Ha azonban a cél bemeneteit és kimeneteit akkor ellenőrzi a rendszer, amikor az Élő egység tesztelése elindítja a második buildet (az előző build újonnan létrehozott forrásfájljainak észlelése után), akkor az a buildelési ciklusból indul ki, mert a bemenetek és kimenetek ellenőrzése azt jelzi, hogy minden up-to-date.
Szerkesztőikonok
Miért nem látok ikonokat a szerkesztőben annak ellenére, hogy az Élő egység tesztelése úgy tűnik, hogy a kimeneti ablakban lévő üzenetek alapján futtatja a teszteket?
Előfordulhat, hogy nem jelennek meg ikonok a szerkesztőben, ha az élő egység tesztelése által használt szerelvények semmilyen okból nem vannak rendszerezetten. Az élő egység tesztelése például nem kompatibilis a <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
beállított projektekkel. Ebben az esetben a buildelési folyamatot frissíteni kell, hogy eltávolítsa ezt a beállítást, vagy módosítsa true
az élő egység tesztelésének működéséhez.
Naplók rögzítése
Hogyan gyűjthetek részletesebb naplókat a hibajelentések fájlba való beolvasásához?
A részletesebb naplók gyűjtéséhez több dolgot is elvégezhet:
Nyissa meg az Eszközök>Beállítások>Élő egység tesztelése lehetőséget, és módosítsa a naplózási beállítást Részletes. Részletes naplózás esetén részletesebb naplók jelennek meg a Kimeneti ablakban.
Állítsa a
LiveUnitTesting_BuildLog
felhasználói környezeti változót az MSBuild napló rögzítéséhez használni kívánt fájl nevére. Az MSBuild részletes naplóüzenetei ezután lekérhetők az adott fájlból az élő egységtesztelési buildekből.Állítsa a
LiveUnitTesting_TestPlatformLog
felhasználói környezeti változót1
a tesztplatform-napló rögzítéséhez. Az élő egységtesztelési futtatások részletes tesztplatform-naplóüzenetei ezután lekérhetők[Solution Root]\.vs\[Solution Name]\log\[VisualStudio Process ID]
.Hozzon létre egy
VS_UTE_DIAGNOSTICS
nevű felhasználói szintű környezeti változót, és állítsa be 1 (vagy bármilyen érték) értékre, majd indítsa újra a Visual Studiót. Most sok naplózást kell látnia a Kimenet – Tesztek lapon a Visual Studióban.
Munkaterület mappa
Szerkeszthetim a fájlokat a munkaterület mappájában?
Nem, nem szabad megnyitnia vagy szerkesztenie a fájlokat a munkaterület mappájának buildelési és tesztelési könyvtárai alatt. Az élő egység tesztelésének a src mappában lévő összes fájlt kezelnie kell, hogy szinkronban maradjanak a adattár gyökér és munkaterület gyökérközött.
Fejlesztői meghajtók
Támogatja az élő egység tesztelése a Dev Drive-ot az alapértelmezett munkaterület gyökeréhez?
Igen, de meg kell győződnie arról, hogy engedélyezve van. Dev Drive használata esetén győződjön meg arról, hogy a előrejelzett fájlrendszer (ProjFS) szűrő engedélyezve van. A következő parancs például engedélyezi a ProjFS-t és a Windows Defendert:
fsutil devdrv setfiltersallowed PrjFlt,WdFilter