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:
- Högerklicka på lösningsnoden i Solution Explorer.
- I snabbmenyn väljer du Lägg till>Nytt projekt.
- 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:
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:
- Högerklicka på lösningsnoden i Solution Explorer.
- I snabbmenyn väljer du Lägg till>Nytt projekt.
- 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:
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.
Länka till objekt- eller biblioteksfiler
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
, WinMain
eller 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.
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.
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
På menyn Test väljer du Test Explorer. Följande bild visar ett testprojekt innan du kör tester.
Anmärkning
CTest-integrering med Test Explorer är inte tillgänglig ännu. Kör CTest-tester från CMake-huvudmenyn.
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.
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.
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.
Välj ikonen för mer information eller för att köra eller felsöka enhetstestet: