Dela via


Skriva enhetstester för C/C++ i Visual Studio

Du kan skriva och köra C++-enhetstester med hjälp av fönstret Test Explorer. Det fungerar precis som för andra språk. Mer information om hur du använder Test Explorerfinns i Kör enhetstester med Test Explorer.

Anmärkning

Vissa funktioner som liveenhetstestning, kodade användargränssnittstester och IntelliTest stöds inte för C++.

Visual Studio innehåller dessa C++-testramverk utan extra nedladdningar som krävs:

  • Microsoft Unit Testing Framework för C++
  • Google Test
  • Boost.Test
  • CTest

Du kan använda de installerade ramverken eller skriva ett eget testkort för det ramverk som du vill använda i Visual Studio. En testadapter integrerar enhetstester med fönstret Test Explorer. Flera icke-Microsoft-adaptrar finns tillgängliga på Visual Studio Marketplace. Mer information finns i Installera enhetstestramverk.

  • Visual Studio 2017 och senare (Professional och Enterprise)

    C++-enhetstestprojekt stöder CodeLens.

  • Visual Studio 2017 och senare (alla utgåvor)

    • Google Test Adapter ingår som standardkomponent i Desktop-utveckling med C++ arbetsbelastning. Den har en projektmall som du kan lägga till i en lösning. Högerklicka på lösningsnoden i Solution Explorer och välj Lägg till>Nytt projekt på snabbmenyn för att lägga till projektmallen. Den har också alternativ som du kan konfigurera med hjälp av Verktyg>Alternativ. Mer information finns i Så här använder du Google Test i Visual Studio.

    • Boost.Test ingår som standardkomponent i Desktop-utveckling med C++ arbetsbelastning. Den är integrerad med Test Explorer, men har för närvarande ingen projektmall. Du måste konfigurera den manuellt. Mer information finns i How to: Use Boost.Test in Visual Studio.

    • CTest support ingår i C++ CMake-verktyg komponent, som ingår i Desktop-utveckling med C++ arbetsbelastning. Mer information finns i Så här använder du CTest i Visual Studio.

  • Tidigare versioner av Visual Studio

    Du kan ladda ned tilläggen Google Test adapter och Boost.Test Adapter på Visual Studio Marketplace. Hitta dem på Testadapter för Boost.Test och Testadapter för Google Test.

Tips

Du kan också använda Copilot /tests snedstreckskommando för att generera enhetstester från kod. Du kan till exempel skriva /tests using Boost framework för att generera Boost.Test-tester. Mer information finns i Använda snedstreckskommandon i Copilot Chat.

Grundläggande testarbetsflöde

Följande avsnitt visar de grundläggande stegen för att komma igång med C++-enhetstestning. Den grundläggande konfigurationen liknar både Microsofts och Googles testramverk. Boost.Test kräver att du skapar ett testprojekt manuellt.

Skapa ett testprojekt i Visual Studio 2022

Definiera och köra enhetstester i ett eller flera testprojekt. Ett testprojekt skapar en separat app som anropar koden i den körbara filen och rapporterar om dess beteende. Skapa testprojekt i samma lösning som den kod som du vill testa.

Så här lägger du till ett nytt testprojekt i en befintlig lösning:

  1. Högerklicka på lösningsnoden i Solution Explorer.
  2. I snabbmenyn väljer du Lägg till>Nytt projekt.
  3. Ange Language till C++ och skriv test i sökrutan. Följande skärmbild visar de testprojekt som är tillgängliga när arbetsflödena Desktop Development med C++ och UWP Development är installerade:

Skärmbild som visar fönstret Lägg till ett nytt projekt med C++ markerat i Visual Studio 2022.

Skapa ett testprojekt i Visual Studio 2019

Definiera och köra tester i ett eller flera testprojekt. Skapa projekten i samma lösning som den kod som du vill testa.

Så här lägger du till ett nytt testprojekt i en befintlig lösning:

  1. Högerklicka på lösningsnoden i Solution Explorer.
  2. I snabbmenyn väljer du Lägg till>Nytt projekt.
  3. Ange Language till C++ och skriv test i sökrutan. Följande skärmbild visar de testprojekt som är tillgängliga när arbetsflödena Desktop Development med C++ och UWP Development är installerade:

Skärmbild som visar fönstret Lägg till ett nytt projekt med C++ markerat i Visual Studio 2019.

Skapa referenser till andra projekt i lösningen

Om du vill aktivera åtkomst till funktionerna i projektet som testas lägger du till en referens till projektet i testprojektet. Expandera testprojektet i Solution Explorer. Högerklicka på Referenser och välj sedan Lägg till>Referens. I dialogrutan Lägg till referens väljer du de projekt som du vill testa.

Skärmbild som visar dialogrutan Lägg till referens i Visual Studio 2022.

Om testkoden inte exporterar de funktioner som du vill testa lägger du till utdata .obj eller .lib filer till beroendena för testprojektet. Mer information finns i Om du vill länka testerna till objektet eller biblioteksfilerna. Ta inte med objektfiler som har en main funktion eller någon annan standardinmatningspunkt, till exempel wmain, WinMaineller DllMain. När du lägger till nya källfiler i projektet uppdaterar du beroendena för testprojektet så att de innehåller motsvarande objektfiler.

Lägga till #include direktiv för huvudfiler

I enhetstestet .cpp fil lägger du till ett #include-direktiv för alla huvudfiler som deklarerar de typer och funktioner som du vill testa. Skriv #include "och sedan aktiveras IntelliSense för att hjälpa dig att välja. Upprepa för fler rubriker.

Skärmbild som visar Solution Explorer med en #include-instruktion där IntelliSense markerar en rubrikfil i Visual Studio 2022.

Tips

Om du vill undvika att behöva skriva den fullständiga sökvägen i varje include-instruktion i källfilen lägger du till de nödvändiga mapparna i Project>Properties>C/C++>General>Additional Include Directories.

Skriv testmetoder

Anmärkning

Det här avsnittet visar syntax för Microsoft Unit Testing Framework för C/C++. Mer information finns i Microsoft.VisualStudio.TestTools.CppUnitTestFramework API-referens.

Dokumentation om Google Test finns i Google Test primer. Mer information om Boost.Test finns i Boost Test library: The unit test framework.

Den .cpp filen i testprojektet har en stub-klass och metod som definierats åt dig. De visar ett exempel på hur du skriver testkod. Signaturerna använder makrona TEST_CLASS och TEST_METHOD, vilket gör att metoderna kan identifieras från Test Explorer-fönstret.

Skärmbild som visar en stub-klass och -metod med hjälp av makrona TEST_CLASS och TEST_METHOD i Visual Studio 2022.

Skärmbild som visar en stub-klass och -metod med hjälp av makrona TEST_CLASS och TEST_METHOD i Visual Studio 2019.

TEST_CLASS och TEST_METHOD ingår i Microsoft Native Test Framework. Test Explorer identifierar testmetoder i andra ramverk som stöds på ett liknande sätt.

Metoden TEST_METHOD returnerar void. Om du vill skapa ett testresultat använder du statiska metoder i klassen Assert för att testa faktiska resultat mot förväntade resultat. I följande exempel kan du anta att MyClass har en konstruktor som tar en std::string. Det här exemplet visar hur du kan testa att konstruktorn initierar klassen på det sätt som du förväntar dig:

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

I föregående exempel avgör resultatet av Assert::AreEqual-anropet om testet godkänns eller misslyckas. Klassen Assert innehåller många andra metoder för att jämföra förväntade resultat med faktiska resultat.

Du kan lägga till egenskaper till testmetoder för att ange testägare, prioritet och annan information. Du kan sedan använda dessa värden för att sortera och gruppera tester i Test Explorer. Mer information finns i Köra enhetstester med Test Explorer.

Kör testerna

  1. På menyn Test väljer du Test Explorer. Följande bild visar ett testprojekt innan du kör tester.

    Skärmbild som visar Test Explorer innan du kör tester i Visual Studio 2022.

    Skärmbild som visar Test Explorer innan du kör tester i Visual Studio 2019.

    Anmärkning

    CTest-integrering med Test Explorer är inte tillgänglig ännu. Kör CTest-tester från CMake-huvudmenyn.

  2. Om något av dina tester saknas i fönstret skapar du testprojektet genom att högerklicka på noden i Solution Explorer och välja Skapa eller Återskapa.

  3. I Test Explorerväljer du Kör allaeller väljer de specifika tester som du vill köra. Högerklicka på ett test för andra alternativ, inklusive att köra det i felsökningsläge med brytpunkter aktiverade. När alla tester har körts visar fönstret de tester som har godkänts och de som misslyckades.

    Skärmbild som visar Test Explorer när tester har körts i Visual Studio 2022.

    Skärmbild som visar Test Explorer när tester har körts i Visual Studio 2019.

För misslyckade tester visar meddelandet information som hjälper dig att diagnostisera orsaken. Högerklicka på det misslyckade testet för en popup-meny. Välj Felsök för att gå igenom funktionen där felet inträffade.

Mer information om hur du använder Test Explorerfinns i Kör enhetstester med Test Explorer.

Mer information om enhetstestning finns i grunderna för Enhetstest.

Använda CodeLens

Visual Studio 2017 och senare (Professional- och Enterprise-utgåvor)

CodeLens kan du snabbt se status för ett enhetstest utan att lämna kodredigeraren.

Initiera CodeLens för ett C++-enhetstestprojekt på något av följande sätt:

  • Redigera och skapa ditt testprojekt eller din lösning.
  • Återskapa projektet eller lösningen.
  • Kör tester från Test Explorer-fönstret.

När du har initierat CodeLens kan du se teststatusikonerna ovanför varje enhetstest.

Skärmbild som visar ikonerna C++ CodeLens i Visual Studio 2019.

Välj ikonen för mer information eller för att köra eller felsöka enhetstestet:

Skärmbild som visar ikonen C++ CodeLens när du har valt den för mer information i Visual Studio 2022.