Upravit

Sdílet prostřednictvím


Nejčastější dotazy k Live Unit Testing

Podporované architektury

Jaké testovací architektury live Unit Testing podporuje a jaké jsou minimální podporované verze?

Live Unit Testing funguje se třemi oblíbenými architekturami testování jednotek uvedenými v následující tabulce. V tabulce je uvedená také minimální podporovaná verze adaptérů a architektur. Všechny architektury testování jednotek jsou dostupné z NuGet.org.

Testovací architektura Minimální verze adaptéru sady Visual Studio Minimální verze architektury
xUnit.net xunit.runner.visualstudio verze 2.2.0-beta3-build1187 xunit 1.9.2
NUnit NUnit3TestAdapter verze 3.7.0 NUnit verze 3.5.0
MSTest MSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-preview

Pokud máte starší projekty testů založené na MSTestu, které odkazují Microsoft.VisualStudio.QualityTools.UnitTestFramework a nechcete přejít na novější balíčky MSTest NuGet, upgradujte na Visual Studio 2019 nebo Visual Studio 2017.

Podpora .NET Core

Funguje Live Unit Testing s .NET Core?

Ano. Live Unit Testing funguje s .NET Core a rozhraním .NET Framework.

Konfigurace

Proč živé testování částí nefunguje, když ho zapnu?

Okno Výstup (při výběru rozevíracího seznamu Live Unit Testing) by vám mělo říct, proč live unit testing nefunguje. Live Unit Testing nemusí fungovat z některého z následujících důvodů:

  • Pokud se balíčky NuGet odkazované projekty v řešení neobnovily, Live Unit Testing nebude fungovat. Než zapnete Live Unit Testing, měli byste tento problém vyřešit provedením explicitního sestavení řešení nebo obnovením balíčků NuGet v řešení.

  • Pokud ve svých projektech používáte testy založené na MSTest, nezapomeňte odebrat odkaz na Microsoft.VisualStudio.QualityTools.UnitTestFrameworka přidat odkazy na nejnovější balíčky MSTest.TestAdapter MSTest NuGet (vyžaduje se minimální verze 1.1.11) a MSTest.TestFramework (vyžaduje se minimální verze 1.1.11). Další informace najdete v části Podporované testovací architektury v článku o použití live unit testing v sadě Visual Studio .

  • Alespoň jeden projekt v řešení by měl mít odkaz NuGet nebo přímý odkaz na testovací architekturu xUnit, NUnit nebo MSTest. Tento projekt by také měl odkazovat na odpovídající testovací adaptéry sady Visual Studio balíček NuGet.

Proč se můj projekt nestaví?

Chyby sestavení se zobrazí v okně Výstup, když je vybrán rozevírací seznam Live Unit Testing. Existuje několik běžných problémů způsobených nesprávnou konfigurací v průvodci instalací, které můžou způsobit problémy se sestavením v live Unit Testing.

  • Pokud je kořenová vlastnost pracovního prostoru příliš dlouhá, je možné, že sestavení selže kvůli výjimkám označujícím, že cesta je příliš dlouhá.

  • Pokud kořenová vlastnost úložiště neodkazuje na kořen úložiště, pracovní prostor se naplní chybnou sadou souborů.

  • U úložišť Git se vlastnost Exclude files obvykle vyhne kopírování souborů zadaných v souboru gitignore . Je ale možné vrátit soubory do úložiště Git, které jsou ignorovány, nebo je možné spouštět nástroje, které automaticky generují soubory, ale tyto soubory se negenerují během sestavení. V těchto případech by se měla zvolit možnost Vlastní> a vlastní sada pravidel,< která uvádějí jenom složky artefaktů.

Kromě dříve popsaných problémů se následující konfigurace projektu, které se nemusí správně sestavit.

  • Pokud jsou závislosti projektu zadány jako globální konfigurace řešení, a ne jako ProjectReferences pro každý projekt, Live Unit Testing může skončit sestavení nesprávné sady projektů. Pokud chcete tento problém vyřešit, přidejte mezi projekty explicitní odkazy.

  • Dokud nebude vybrán seznam stop Live Unit Testing, Live Unit Testing nevystaví žádné projekty. Pokud chcete tento problém vyřešit, zahrňte do seznamu stop Live Unit Testing některé testy.

  • Pokud ve svých projektech používáte testy založené na MSTest, nezapomeňte odebrat odkaz na Microsoft.VisualStudio.QualityTools.UnitTestFrameworka přidat odkazy na nejnovější balíčky MSTest.TestAdapter NUGet MSTest (vyžaduje se minimální verze 1.1.11) a MSTest.TestFramework (vyžaduje se minimální verze 1.1.11). Další informace naleznete v tématu Podporované testovací architektury.

  • Alespoň jeden projekt v řešení by měl mít odkaz NuGet nebo přímý odkaz na testovací architekturu xUnit, NUnit nebo MSTest. Tento projekt by také měl odkazovat na odpovídající testovací adaptéry sady Visual Studio balíček NuGet. Na testovací adaptér sady Visual Studio lze odkazovat také prostřednictvím souboru .runsettings . Soubor .runsettings musí mít položku jako v následujícím příkladu:

<RunSettings>
    <RunConfiguration>
          <TestAdaptersPaths>path-to-your-test-adapter</TestAdaptersPaths>
    </RunConfiguration>
</RunSettings>

Proč se moje testy nedaří spustit?

  • Běžným problémem je, že se do testovací složky nekopírují všechny soubory. Do souborů csproj možná budete muset přidat některé položky závislostí testů live Unit Testing.

  • Dalším problémem jsou časové limity. Vzhledem k tomu, že Live Unit Testing spouští testy po neomezenou dobu, automaticky přeruší spuštění, pokud testy běží příliš dlouho. Časový limit můžete zvýšit v Průvodci projektem.

Nesprávné pokrytí po upgradu

Proč live Unit Testing zobrazuje po upgradu testovacího adaptéru odkazovaného v projektech sady Visual Studio na podporovanou verzi nesprávné pokrytí?

  • Pokud více projektů v řešení odkazuje na balíček adaptéru testu NuGet, musí být každý z nich upgradován na podporovanou verzi.

  • Ujistěte se, že je správně aktualizován také soubor MSBuild .props importovaný z balíčku testovacího adaptéru. Zkontrolujte verzi nebo cestu balíčku NuGet importu, která se obvykle nachází v horní části souboru projektu, například následující:

      <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')" />
    

Přizpůsobení sestavení

Můžu přizpůsobit buildy Live Unit Testing?

Pokud vaše řešení vyžaduje vlastní kroky pro sestavení instrumentace (Live Unit Testing), které nejsou vyžadovány pro "běžné" ne instrumentované sestavení, můžete do projektu nebo souborů .targets přidat kód, který kontroluje BuildingForLiveUnitTesting vlastnost, a provádět vlastní kroky před sestavením nebo po sestavení. Můžete také odebrat určité kroky sestavení (například publikování nebo generování balíčků) nebo přidat kroky sestavení (jako je kopírování požadavků) do sestavení Live Unit Testing na základě této vlastnosti projektu. Přizpůsobení sestavení na základě této vlastnosti nijak nemění vaše běžné sestavení a má vliv pouze na sestavení Live Unit Testing.

Například může existovat cíl, který během pravidelného sestavení vytváří balíčky NuGet. Pravděpodobně nechcete, aby se balíčky NuGet vygenerovaly po každé provedené úpravě. Tento cíl tedy můžete zakázat v buildu Live Unit Testing provedením něčeho podobného:

<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' != 'true'">
    <Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>

Průzkumník testů versus Live Unit Testing

Jak se spouštění testů z okna Průzkumníka testů liší od spouštění testů v Live Unit Testing?

Existuje několik rozdílů:

  • Spouštění nebo ladění testů z okna Průzkumníka testů spouští běžné binární soubory, zatímco Live Unit Testing spouští instrumentované binární soubory. Pokud chcete ladit instrumentované binární soubory, přidání volání metody Debugger.Launch do testovací metody způsobí spuštění ladicího programu při každém spuštění této metody (včetně při spuštění live Unit Testing) a pak můžete připojit a ladit instrumentovaný binární soubor. Doufáme ale, že instrumentace je pro většinu uživatelských scénářů transparentní a že nemusíte ladit instrumentované binární soubory.

  • Live Unit Testing nevytvoří novou doménu aplikace pro spouštění testů, ale testy spouštěné z okna Průzkumníka testů vytvoří novou doménu aplikace.

  • Live Unit Testing spouští testy v jednotlivých sestaveních testů postupně. V Průzkumníku testů můžete spustit více testů paralelně.

  • Průzkumník testů ve výchozím nastavení spouští testy v apartmánu s jedním vláknem (STA), zatímco Live Unit Testing spouští testy ve vícevláknovém apartmánu (MTA). Chcete-li spustit testy MSTest v STA v Live Unit Testing, ozdobte testovací metodu nebo obsahující třídu pomocí <STATestMethod> nebo <STATestClass> atributu, který lze najít v MSTest.STAExtensions 1.0.3-beta balíčku NuGet. Pro NUnit, ozdobte testovací metodu <RequiresThread(ApartmentState.STA)> atributem a pro xUnit, s atributem <STAFact> .

Vyloučení testů

Návody vyloučit testy z účasti v Live Unit Testing?

Informace o nastavení specifickém pro uživatele najdete v části Zahrnutí a vyloučení testovacích projektů a testovacích metod v článku Použití funkce Live Unit Testing v sadě Visual Studio . Zahrnutí nebo vyloučení testů je užitečné, když chcete spustit konkrétní sadu testů pro určitou relaci úprav nebo zachovat vlastní osobní předvolby.

U nastavení specifických pro řešení můžete atribut použít System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute programově k vyloučení metod, vlastností, tříd nebo struktur z instrumentace Live Unit Testing. Kromě toho můžete vlastnost true nastavit <ExcludeFromCodeCoverage> v souboru projektu tak, aby se vyloučil celý projekt z instrumentace. Live Unit Testing bude stále spouštět testy, které nebyly instrumentovány, ale jejich pokrytí nebude vizualizováno.

Můžete také zkontrolovat, jestli Microsoft.CodeAnalysis.LiveUnitTesting.Runtime je načtený v aktuální doméně aplikace, a zakázat testy na základě důvodů. Například pomocí xUnit můžete udělat něco podobného:

[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);
   }
}

Průběžné sestavování

Proč živé testování jednotek neustále vytváří řešení, i když neprovádím žádné úpravy?

Vaše řešení se může sestavit, i když neprovádíte úpravy, pokud proces sestavení generuje zdrojový kód, který je součástí samotného řešení, a cílové soubory sestavení nemají zadané odpovídající vstupy a výstupy. Cílům by se měl dát seznam vstupů a výstupů, aby nástroj MSBuild mohl provádět odpovídající aktuální kontroly a určit, jestli se vyžaduje nové sestavení.

Live Unit Testing spustí sestavení vždy, když zjistí, že se změnily zdrojové soubory. Vzhledem k tomu, že sestavení vašeho řešení generuje zdrojové soubory, Live Unit Testing se dostane do nekonečné smyčky sestavení. Pokud se ale při živém testování částí spustí druhé sestavení (po zjištění nově vygenerovaných zdrojových souborů z předchozího sestavení), přeruší se vstupy a výstupy cíle, protože vstupy a výstupy kontrolují, že vše je aktuální.

Ikony editoru

Proč se v editoru nezobrazují žádné ikony, i když se zdá, že live Unit Testing spouští testy na základě zpráv v okně Výstup?

Ikony se nemusí v editoru zobrazovat, pokud sestavení, na které live Unit Testing pracuje, nejsou z nějakého důvodu instrumentovaná. Live Unit Testing například není kompatibilní s projekty, které nastavily <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>. V takovém případě je potřeba aktualizovat proces sestavení tak, aby buď toto nastavení odebral, nebo aby ho změnil na true Live Unit Testing, aby fungoval. 

Zachytávání protokolů

Návody shromažďovat podrobnější protokoly pro hlášení o chybách?

Pokud chcete shromáždit podrobnější protokoly, můžete udělat několik věcí:

  • Přejděte na Možnosti>nástroje>Live Unit Testing a změňte možnost protokolování na Podrobné. Podrobné protokolování způsobí zobrazení podrobnějších protokolů v okně Výstup .

  • Nastavte proměnnou LiveUnitTesting_BuildLog uživatelského prostředí na název souboru, který chcete použít k zachycení protokolu MSBuild. Podrobné zprávy protokolu NÁSTROJE MSBuild z sestavení Live Unit Testing je pak možné načíst z daného souboru.

  • Nastavte proměnnou LiveUnitTesting_TestPlatformLog prostředí uživatele tak, aby 1 zachytila protokol testovací platformy. Podrobné zprávy protokolu testovací platformy z běhů Live Unit Testing je pak možné načíst z [Solution Root]\.vs\[Solution Name]\log\[VisualStudio Process ID].

  • Vytvořte proměnnou prostředí na úrovni uživatele s názvem VS_UTE_DIAGNOSTICS a nastavte ji na 1 (nebo libovolnou hodnotu) a restartujte Visual Studio. Teď byste měli vidět spoustu protokolování na kartě Výstup – testy v sadě Visual Studio.

Složka pracovního prostoru

Můžu upravovat soubory ve složce pracovního prostoru?

Ne, neměli byste otevírat ani upravovat soubory v adresářích sestavení a testů složky pracovního prostoru. Live Unit Testing by měl spravovat všechny soubory ve složce src, aby se synchronizovaly mezi kořenem úložiště a kořenem pracovního prostoru.

Vývojové jednotky

Podporuje živé testování jednotek pro výchozí kořen pracovního prostoru Dev Drive?

Ano, ale musíte se ujistit, že je povolená. Pokud používáte Dev Drive, ujistěte se, že je povolený filtr projFS (ProjectEd File System). Například následující příkaz povolí ProjFS a Windows Defender:

fsutil devdrv setfiltersallowed PrjFlt, WdFilter