Testování knihovny tříd .NET pomocí sady Visual Studio
Důležité
Společnost Microsoft oznámila vyřazení Visual Studio pro Mac. Visual Studio pro Mac již nebudou podporovány od 31. srpna 2024. Mezi alternativy patří:
- Visual Studio Code se sadou C# Dev Kit a souvisejícími rozšířeními, jako jsou .NET MAUI a Unity.
- Visual Studio spuštěné ve Windows na virtuálním počítači na Macu
- Visual Studio spuštěné ve Windows na virtuálním počítači v cloudu
Další informace najdete v tématu Visual Studio pro Mac oznámení o vyřazení z provozu.
V tomto kurzu se dozvíte, jak automatizovat testování jednotek přidáním testovacího projektu do řešení.
Požadavky
- Tento kurz pracuje s řešením, které vytvoříte v knihovně tříd .NET pomocí Visual Studio pro Mac.
Vytvoření projektu testování částí
Testy jednotek poskytují automatizované testování softwaru během vývoje a publikování. MSTest je jedna ze tří testovacích architektur, ze které si můžete vybrat. Ostatní jsou xUnit a nUnit.
Spusťte Visual Studio pro Mac.
ClassLibraryProjects
Otevřete řešení, které jste vytvořili v knihovně tříd .NET pomocí Visual Studio pro Mac.Na panelu Řešení klikněte na
ClassLibraryProjects
řešení a vyberte Přidat>nový projekt.V dialogovém okně Nový projekt vyberte Testy z uzlu Web a Konzola . Vyberte projekt MSTest následovaný dalším.
Jako cílovou architekturu vyberte .NET 5.0 a vyberte Další.
Pojmenujte nový projekt StringLibraryTest a vyberte Vytvořit.
Visual Studio vytvoří soubor třídy s následujícím kódem:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Zdrojový kód vytvořený šablonou testu jednotek provede následující:
- Importuje Microsoft.VisualStudio.TestTools.UnitTesting obor názvů, který obsahuje typy používané pro testování jednotek.
- TestClassAttribute Použije atribut na
UnitTest1
třídu. - Použije atribut na TestMethodAttribute
TestMethod1
.
Každá metoda označená metodou [TestMethod] v testovací třídě označené pomocí třídy [TestClass] se spustí automaticky při spuštění testu jednotek.
Přidání odkazu na projekt
Aby testovací projekt fungoval s StringLibrary
třídou, přidejte odkaz na StringLibrary
projekt.
Na panelu Řešení stiskněte klávesu Ctrl a klikněte na Závislosti v části StringLibraryTest. V místní nabídce vyberte Přidat odkaz .
V dialogovém okně Odkazy vyberte projekt StringLibrary . Vyberte OK.
Přidání a spuštění metod testování jednotek
Když Visual Studio spustí test jednotek, spustí každou metodu označenou atributem TestMethodAttribute ve třídě, která je označena atributem TestClassAttribute . Testovací metoda skončí, když se najde první selhání nebo když všechny testy obsažené v metodě proběhly úspěšně.
Nejběžnější testy volají členy Assert třídy. Mnoho metod assert zahrnuje alespoň dva parametry, jeden z nich je očekávaný výsledek testu a druhý z nich je skutečný výsledek testu. Některé z Assert
nejčastěji nazývaných metod třídy jsou uvedené v následující tabulce:
Metody Assert | Function |
---|---|
Assert.AreEqual |
Ověřuje, že jsou dvě hodnoty nebo objekty stejné. Kontrolní výraz selže, pokud se hodnoty nebo objekty nerovnají. |
Assert.AreSame |
Ověřuje, že dvě proměnné objektu odkazují na stejný objekt. Kontrolní výraz selže, pokud proměnné odkazují na různé objekty. |
Assert.IsFalse |
Ověřuje, že podmínka je false . Kontrolní výraz selže, pokud je true podmínka . |
Assert.IsNotNull |
Ověřuje, že objekt není null . Výraz selže, pokud je null objekt . |
Můžete také použít metodu Assert.ThrowsException v testovací metodě k označení typu výjimky, kterou má vyvolat. Test selže, pokud není vyvolán zadaná výjimka.
Při testování StringLibrary.StartsWithUpper
metody chcete zadat řadu řetězců, které začínají velkými písmeny. Očekáváte, že se metoda v těchto případech vrátí true
, takže můžete metodu Assert.IsTrue volat. Podobně chcete zadat řadu řetězců, které začínají něčím jiným než velkým znakem. Očekáváte, že se metoda v těchto případech vrátí false
, takže můžete metodu Assert.IsFalse volat.
Vzhledem k tomu, že vaše metoda knihovny zpracovává řetězce, chcete se také ujistit, že úspěšně zpracovává prázdný řetězec (String.Empty
), platný řetězec, který neobsahuje žádné znaky a jehož Length je 0, a null
řetězec, který nebyl inicializován. Můžete volat StartsWithUpper
přímo jako statickou metodu a předat jeden String argument. Nebo můžete volat StartsWithUpper
jako rozšiřující metodu pro proměnnou přiřazenou string
null
.
Definujete tři metody, z nichž každá volá metodu Assert pro každý prvek v řetězcovém poli. Zavoláte přetížení metody, které vám umožní zadat chybovou zprávu, která se zobrazí v případě selhání testu. Zpráva identifikuje řetězec, který způsobil selhání.
Vytvoření testovacích metod:
Otevřete soubor UnitTest1.cs a nahraďte kód následujícím kódem:
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } } }
Test velkých písmen v
TestStartsWithUpper
metodě obsahuje řecké velké písmeno alfa (U+0391) a velké písmeno cyrilice EM (U+041C). Test malých písmen vTestDoesNotStartWithUpper
metodě obsahuje řecké malé písmeno alfa (U+03B1) a malé písmeno cyrilice Ghe (U+0433).Na řádku nabídek vyberte Soubor>uložit jako. V dialogovém okně se ujistěte, že je kódování nastavené na Unicode (UTF-8).
Až se zobrazí dotaz, jestli chcete existující soubor nahradit, vyberte Nahradit.
Pokud zdrojový kód neuložíte jako soubor s kódováním UTF8, visual Studio ho může uložit jako soubor ASCII. V takovém případě modul runtime přesně nekóduje znaky UTF8 mimo rozsah ASCII a výsledky testu nebudou správné.
Otevřete panel Testy jednotek na pravé straně obrazovky. V nabídce vyberte Zobrazit>testy.
Kliknutím na ikonu Docku ponechte panel otevřený.
Klikněte na tlačítko Spustit vše .
Všechny testy jsou úspěšné.
Zpracování selhání testů
Pokud provádíte vývoj řízený testy (TDD), nejdřív napíšete testy a při prvním spuštění selžou. Pak do aplikace přidáte kód, který test uspěje. Pro účely tohoto kurzu jste vytvořili test po napsání kódu aplikace, který ověří, takže se test nepovede. Pokud chcete ověřit, že test selže, když očekáváte, že selže, přidejte do vstupu testu neplatnou hodnotu.
words
Upravte pole vTestDoesNotStartWithUpper
metodě tak, aby zahrnoval řetězec Error. Soubor nemusíte ukládat, protože Visual Studio automaticky ukládá otevřené soubory při sestavení řešení pro spouštění testů.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Znovu spusťte testy.
Tentokrát okno Průzkumníka testů indikuje, že dva testy byly úspěšné a jedna selhala.
Stiskněte klávesu Ctrl a klikněte na neúspěšný test
TestDoesNotStartWithUpper
a v místní nabídce vyberte Zobrazit panel výsledků.Na panelu Výsledky se zobrazí zpráva vytvořená výrazem Assert.IsFalse se nezdařila. Byl očekáváno pro chybu: false; actual: True". Kvůli selhání nebyly po otestování chyby v poli žádné řetězce.
Odeberte řetězec Chyba, který jste přidali v kroku 1. Znovu spusťte test a testy projdou.
Testování verze knihovny
Teď, když testy proběhly při spuštění sestavení ladění knihovny, spusťte testy ještě jednou oproti sestavení vydané verze knihovny. Řada faktorů, včetně optimalizací kompilátoru, může někdy způsobit jiné chování mezi sestaveními Debug a Release.
Otestování sestavení vydané verze:
Na panelu nástrojů sady Visual Studio změňte konfiguraci sestavení z ladění na verzi.
Na panelu Řešení stiskněte klávesu Ctrl a klikněte na projekt StringLibrary a v místní nabídce vyberte Sestavit a knihovnu znovu zkompilujte.
Znovu spusťte testy jednotek.
Testy jsou úspěšné.
Ladění testů
Pokud jako integrované vývojové prostředí používáte Visual Studio pro Mac, můžete použít stejný postup jako v kurzu: Ladění konzolové aplikace .NET pomocí Visual Studio pro Mac k ladění kódu pomocí projektu testování jednotek. Místo spuštění projektu aplikace ShowCase klikněte na projekt StringLibraryTests a v místní nabídce vyberte Spustit ladění projektu.
Visual Studio spustí testovací projekt s připojeným ladicím programem. Provádění se zastaví na libovolné zarážce, kterou jste přidali do testovacího projektu nebo základního kódu knihovny.
Další prostředky
Další kroky
V tomto kurzu jste otestovali knihovnu tříd. Knihovnu můžete zpřístupnit ostatním tak, že ji publikujete do NuGetu jako balíček. Postup najdete v kurzu NuGet:
Pokud publikujete knihovnu jako balíček NuGet, můžou ji nainstalovat a používat i ostatní uživatelé. Postup najdete v kurzu NuGet:
Knihovna nemusí být distribuována jako balíček. Může být součástí konzolové aplikace, která ji používá. Informace o publikování konzolové aplikace najdete v předchozím kurzu této série:
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro