Delen via


Migratiehandleiding voor MSTest v3

Deze handleiding helpt gebruikers bij het upgraden van hun MSTest-projecten van MSTest v1 naar MSTest v3. MSTest v3 introduceert belangrijke nieuwe functies, optimalisaties en enkele belangrijke wijzigingen om de betrouwbaarheid, uitvoeringssnelheid en compatibiliteit met moderne .NET-frameworks te verbeteren.

Wie heeft hier last van?

Deze handleiding is bedoeld voor projecten die momenteel .NET Framework-projecten gebruiken met BEHULP van MSTest v1 via een van beide:

  • Assemblyverwijzingen: Projecten die rechtstreeks verwijzen Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll .
  • NuGet-pakketten: Projecten die nuGet-pakket gebruiken MSTest.TestFramework met versie 1.0.0-1.4.0.

Als uw project afhankelijk is van MSTest voor eenheidstests en de bovenstaande verwijzingen bevat, profiteert het van de verbeteringen in MSTest v3 en zijn aanpassingen vereist die in deze handleiding worden beschreven.

Waarom migreren naar MSTest v3?

Zelfs als u tevreden bent met uw huidige MSTest-installatie, ontgrendelt een upgrade naar MSTest v3 aanzienlijke voordelen die zowel de kwaliteit als de toekomstige gereedheid van uw tests verbeteren. Daarom kan het nu een waardevolle stap voorwaarts zijn om de overstap te maken:

  • Verbeterde beveiliging: MSTest v1 heeft bekende beveiligingsproblemen. Met MSTest v3 hebben we uitgebreide beveiligingsverbeteringen geïmplementeerd om uw testomgeving te beveiligen.

  • Onmiddellijke prestatieverbeteringen: MSTest v3 vermindert de uitvoeringstijd van de test aanzienlijk en optimaliseert het resourcegebruik. Dit is met name nuttig in CI/CD-pijplijnen, waarbij snellere tests implementatiecycli kunnen verkorten en de infrastructuurkosten kunnen verlagen.

  • Future-Proofing Your Tests: MSTest v3 biedt robuuste ondersteuning voor moderne .NET-versies, waaronder .NET 8 en toekomstige iteraties, samen met platformoverschrijdende compatibiliteit. Dit betekent dat uw tests meer aanpasbaar zijn en klaar zijn voor upgrades, waardoor de technische schuld van verouderde testframeworks wordt vermeden.

  • Verbeterde betrouwbaarheid van code met New Analyzers: met ingebouwde MSTest v3-codeanalyses worden best practices afgedwongen, waardoor problemen vroeg kunnen worden onderscheppen en schonere, beter onderhoudbare testcode worden bevorderd:

    • Proactieve probleemdetectie: de analysefunctie biedt realtime feedback, stelt verbeteringen voor en markeert potentiële problemen tijdens het schrijven van uw tests.

    • Sterkere Type-Veilige asserties: Het vervangen van dubbelzinnige overbelastingen, MSTest v3 dwingt typeveilige asserties af, waardoor het risico op onjuist testgedrag wordt verminderd en tests betrouwbaarder worden.

    • Cleaner Code, Less Maintenance: Door uw tests af te stemmen op MSTest-standaarden en best practices, helpt MSTest v3 u bij het onderhouden van een schonere, beter beheersbare codebasis, waardoor de technische schulden na verloop van tijd worden verminderd.

  • Meer flexibiliteit en uitbreidbaarheid: MSTest v3 ondersteunt geavanceerde testscenario's, waaronder dynamische gegevensbronnen en parallelle uitvoering van assembly's. Deze flexibiliteit maakt geavanceerdere testmethoden mogelijk en versnelt testsuites zonder complexe configuraties.

Door een upgrade uit te voeren, stelt u uw tests in om sneller, betrouwbaarder en aanpasbaar te zijn aan toekomstige .NET-ontwikkelingen, uw project te positioneren voor succes op lange termijn en eenvoudiger onderhoud.

Migratiestappen

1. Assembly-verwijzing verwijderen

Voor projecten die MSTest v1 via assemblyverwijzingen gebruiken, is er een verwijzing naar de volgende DLL:

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework

In niet-SDK-stijlprojecten worden deze verwijzingen vaak toegevoegd via Visual Studio in plaats van door de XML rechtstreeks te bewerken. U kunt deze verwijzingen verwijderen met behulp van de Visual Studio-GUI:

  1. Open Solution Explorer in Visual Studio.

  2. Vouw het projectknooppunt voor het project uit met behulp van MSTest.

  3. Zoek de map Verwijzingen in het project.

  4. Zoek en selecteer in de map Verwijzingen de MSTest DLL-verwijzingen,Microsoft.VisualStudio.QualityTools.UnitTestFramework

  5. Klik met de rechtermuisknop op de geselecteerde verwijzing(en) en kies Verwijderen in het contextmenu.

    image

  6. Sla het project op om wijzigingen toe te passen.

2. Uw project bijwerken

U kunt uw project op twee manieren bijwerken naar MSTest v3:

  • Pakketten bijwerken: Als u NuGet-pakketverwijzingen hebt naar msTest.TestFramework en msTest.TestAdapter, werkt u deze bij met behulp van de NuGet-Pakketbeheer in Visual Studio of door de volgende opdracht uit te voeren in de NuGet Pakketbeheer Console:

    Update-Package MSTest.TestFramework -Version 3.6.2
    Update-Package MSTest.TestAdapter -Version 3.6.2
    
  • Of installeer MSTest Package: installeer het nieuwste MSTest-pakket met behulp van de NuGet-Pakketbeheer in Visual Studio of door de volgende opdracht uit te voeren in de NuGet Pakketbeheer Console:

    Install-Package MSTest -Version 3.6.2
    
  • Of werk het projectbestand rechtstreeks bij (voor SDK-projecten): Werk het .csproj bestand bij om de MSTest SDK-versie op te geven.

    <Project Sdk="MSTest.Sdk/3.6.2">
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
      </PropertyGroup>
    </Project>
    

Kies de optie die het beste past bij de installatie van uw project. Beide methoden zorgen ervoor dat uw project wordt bijgewerkt om MSTest v3 te gebruiken.

3. Werk uw code bij

  • Assert.AreEqual/AreNotEqual of Assert.AreSame/AreNotSame (met object) Als een van deze beweringen fouten veroorzaakt, raden we u aan te controleren of de typen die worden vergeleken compatibel zijn. Als dat zo is, kunt u expliciet algemeen typen toevoegen om het probleem op te lossen.

  • met behulp van generics:

    Assert.AreEqual<customObject>(expectedObject, actualObject);
    Assert.AreNotEqual<customObject>(expectedObject, actualObject);
    
  • Initialisatie testen: gebruik TestInitialize methoden voor asynchrone initialisatie.

  • Opschonen: gebruik TestCleanup methoden of het Dispose patroon voor opschonen.

  • RunSettings: het .testsettings bestand wordt niet meer ondersteund, wat betekent dat het <LegacySettings> ook niet meer beschikbaar is. Gebruik .runsettings voor de testconfiguratie.

Nieuwe functies in MSTest v3

  • Verbeterde standaardinstellingen voor testprojecten
  • Vereenvoudigde installatie en gebruik
  • Verbeterde uitbreidbaarheid van msTest runner
  • Nieuwe op Roslyn gebaseerde codeanalyses voor verbeterde testontwikkeling
  • Ondersteuning voor WinUI-toepassingen
  • Parallelle uitvoering van assembly's
  • Dynamische gegevensbronnen voor gegevensgestuurde tests

Verouderde functies

  • Verwijderde ondersteuning voor:
    • .NET Framework 4.5 (gebruik .NET 4.6.2 of hoger)
    • .NET Standard 1.0 (gebruik .NET Standard 2.0)
    • UWP-versies vóór 16299
    • WinUI-versies vóór 18362
    • .NET 5 (gebruik .NET Core 3.1 of .NET 6)

Belangrijke wijzigingen en verwijderde API's

Overbelasting van assertie

Als AreEqual-, AreNotEqual-, AreSame- of AreNotSame-asserties fouten veroorzaken, raden we u aan te controleren of de typen die worden vergeleken compatibel zijn. Als dat zo is, kunt u expliciet algemeen typen toevoegen om het probleem op te lossen.

DataRowAttribute Updates

De DataRowAttribute-constructors in MSTest v3 zijn vereenvoudigd om typekoppeling voor parameters af te dwingen. Dit betekent dat u waarden in DataRow moet opgeven die exact overeenkomen met de typen methodeparameters.

Voorbeeld:

[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }

In gevallen waarin typen niet exact overeenkomen, genereert MSTest v3 nu een fout in plaats van een conversie uit te voeren.

Time-outinstellingen

In MSTest v3 is de verwerking van Timeout instellingen gestandaardiseerd om consistent gedrag in verschillende .NET-omgevingen te garanderen. Deze wijziging kan van invloed zijn op tests die afhankelijk zijn van specifieke time-outwaarden, met name als deze tests asynchroon zijn of worden uitgevoerd onder verschillende frameworks.

  • In MSTest v1 of v2 zijn bepaalde time-outinstellingen mogelijk anders geïnterpreteerd, afhankelijk van het framework (bijvoorbeeld .NET Framework versus .NET Core).
  • MSTest v3 dwingt consistent time-outgedrag af, wat kan betekenen dat tests die zijn geconfigureerd met time-outs in eerdere versies mislukken of zich anders gedragen als de time-outwaarden te kort zijn onder de nieuwe standaard.

Wat dit betekent:

  • Tests met time-outs hebben mogelijk aanpassing nodig: als uw tests een Timeout kenmerk met specifieke duur hebben, controleert u of deze waarden nog steeds toestaan dat de test wordt voltooid onder MSTest v3. Tests die eerder met een bepaalde time-out zijn geslaagd, hebben mogelijk een hogere of lagere time-outwaarde nodig om correct te kunnen werken onder de nieuwe regels.

  • Unified Timeout Handling: MSTest v3 unified time-out handling maakt time-outs voorspelbaarder, maar vereist controle en mogelijk bijwerken van Timeout waarden in oudere tests.

Voorbeeld:

// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }

// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... } 

Configuratiewijzigingen

Zorg ervoor dat .runsettings bestanden worden uitgelijnd met de syntaxis en structuur van MSTest v3.

Parallelle uitvoering en optimalisatie van prestaties

Configureer parallelle uitvoering in .runsettings om de prestaties te verbeteren.

Voorbeeld:

<RunSettings>
  <RunConfiguration>
    <MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
  </RunConfiguration>
</RunSettings>

Verbeterd resourcegebruik

MSTest v3 optimaliseert resourcebeheer, wat resulteert in een lager geheugengebruik en betere CPU-efficiëntie.

Verouderde kenmerken verwerken en aangepaste extensies migreren

Bekijk afgeschafte kenmerken en vervang deze indien mogelijk door MSTest v3-alternatieven.

Codeanalyses en best practices

MSTest v3 bevat ingebouwde codeanalyses voor aanbevolen procedures, het vermijden van configuratiestoringen en het juiste gebruik van MSTest-kenmerken en -instellingen. Dit is automatisch beschikbaar wanneer u het MSTest-pakket of MSTest.Sdk gebruikt, of u kunt het MSTest Analyzer-pakket installeren.

Aanvullende bronnen