Kurz: Testování knihovny tříd .NET pomocí editoru Visual Studio Code
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 Vytvoření knihovny tříd .NET pomocí editoru Visual Studio Code.
Vytvoření projektu testování jednotek
Testy jednotek poskytují automatizované testování softwaru během vývoje a publikování. Testovací architektura, kterou používáte v tomto kurzu, je MSTest. MSTest je jednou ze tří testovacích architektur, ze které si můžete vybrat. Ostatní jsou xUnit a nUnit.
Spusťte Visual Studio Code.
Otevřete řešení
ClassLibraryProjects
, které jste vytvořili v vytvoření knihovny tříd .NET pomocí Visual Studio Code.V Průzkumníku řešenívyberte Nový projektnebo na paletě příkazů vyberte .NET: Nový projekt.
Vyberte MSTest Test Project, pojmenujte ho "StringLibraryTest," zvolte výchozí adresář a vyberte Vytvořit projekt.
Šablona projektu vytvoří soubor UnitTest1.cs s následujícím kódem:
namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } }
Zdrojový kód vytvořený šablonou pro jednotkové testy provede následující:
- Použije atribut TestClassAttribute na třídu
UnitTest1
. - Použije atribut TestMethodAttribute k definování
TestMethod1
. - Importuje namespace Microsoft.VisualStudio.TestTools.UnitTesting, který obsahuje typy používané pro jednotkové testování. Namespace se importuje prostřednictvím direktivy
global using
v GlobalUsings.cs.
Každá metoda označená [TestMethod] v testovací třídě označené [TestClass] se spustí automaticky při vyvolání testu jednotek.
- Použije atribut TestClassAttribute na třídu
Přidání odkazu na projekt
Aby testovací projekt fungoval s StringLibrary
třídou, přidejte do projektu StringLibraryTest
odkaz do projektu StringLibrary
.
V průzkumníku řešení klikněte pravým tlačítkem na projekt 'StringLibraryTest' a vyberte Přidat referenci projektu.
Vyberte StringLibrary.
Přidání a spuštění metod testování jednotek
Když Visual Studio vyvolá test jednotek, spustí každou metodu označenou atributem TestMethodAttribute ve třídě označené 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 třídy Assert. 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 nejčastěji volaných metod třídy Assert
jsou uvedeny v následující tabulce:
Metody Assert | Funkce |
---|---|
Assert.AreEqual |
Ověřuje, že jsou dvě hodnoty nebo objekty stejné. Asertace selže, pokud se hodnoty nebo objekty nerovnají. |
Assert.AreSame |
Ověřuje, že dvě proměnné objektu odkazují na stejný objekt. Tvrzení selže, pokud proměnné odkazují na různé objekty. |
Assert.IsFalse |
Ověřuje, že podmínka je false . Asertace selže, pokud je podmínka true . |
Assert.IsNotNull |
Ověřuje, že objekt není null . Assert selže, pokud je objekt null . |
Můžete také použít Assert.ThrowsException (nebo Assert.Throws
a Assert.ThrowsExactly
, pokud v testovací metodě používáte metodu MSTest 3.8 a novější), která označuje typ výjimky, kterou se očekává vyvolání. Test selže, pokud není vyvolána zadaná výjimka.
Při testování metody StringLibrary.StartsWithUpper
chcete zadat několik řetězců, které začínají velkými písmeny. Očekáváte, že metoda vrátí true
v těchto případech, takže můžete zavolat metodu Assert.IsTrue. Podobně chcete zadat počet řetězců, které začínají nějakým jiným znakem než velkým písmenem. Očekáváte, že metoda vrátí false
v těchto případech, takže můžete volat Assert.IsFalse metodu.
Vzhledem k tomu, že metoda knihovny zpracovává řetězce, chcete také zajistit, aby úspěšně zpracovávala prázdný řetězec (String.Empty
) a řetězec null
. Prázdný řetězec je řetězec, který nemá žádné znaky a jehož Length je 0. Řetězec null
je ř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 metodu rozšíření na proměnnou string
přiřazenou k 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 StringLibraryTest/UnitTest1.cs a nahraďte veškerý 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 metodě
TestStartsWithUpper
obsahuje řecké velké písmeno alfa (U+0391) a velké písmeno cyrilice EM (U+041C). Test malých písmen v metoděTestDoesNotStartWithUpper
zahrnuje řecké malé písmeno alfa (U+03B1) a cyrilické malé písmeno Ghe (U+0433).Uložte změny.
Sestavení a spuštění testů
V Průzkumníku řešeníklikněte pravým tlačítkem na řešení a vyberte Sestavit nebo z palety příkazů vyberte .NET: Sestavit.
Vyberte okno Testování, poté zvolte možnost Spustit testy, nebo v paletě příkazů vyberte Test: Spustit všechny testy.
Řešení 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. Potom do aplikace přidáte kód, který způsobí, že test projde. Pro účely tohoto kurzu jste vytvořili test po napsání kódu aplikace, který ověřuje, takže jste neviděli test selhat. Pokud chcete ověřit, že test selže, když očekáváte, že selže, přidejte do vstupu testu neplatnou hodnotu.
Upravte pole
words
v metoděTestDoesNotStartWithUpper
tak, aby zahrnoval řetězec Error.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Testy spusťte kliknutím na zelenou chybu vedle testu v editoru.
Výstup ukazuje, že test selže a zobrazí chybovou zprávu pro neúspěšný test: Assert.IsFalse selhal. Bylo očekáváno pro chybu: false; skutečný: true. Kvůli selhání nebyly v poli otestovány žádné řetězce za „Chybou“.
neúspěšného testu editoru Visual Studio Code
Odeberte řetězec Chyba, který jste přidali v kroku.
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.
Spusťte testy s konfigurací sestavení Release:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Testy jsou úspěšné.
Ladění testů
Pokud jako integrované vývojové prostředí používáte Visual Studio Code, můžete použít stejný postup uvedený v Ladění konzolové aplikace .NET pomocí editoru Visual Studio Code k ladění kódu pomocí projektu testování jednotek. Místo spuštění projektu aplikace ShowCase otevřete StringLibraryTest/UnitTest1.csa vyberte Ladění testů v aktuálním souboru mezi řádky 7 a 8. Pokud ho nemůžete najít, stisknutím kláves Ctrl+Shift+P otevřete paletu příkazů a zadejte Znovu načíst okno.
Visual Studio Code 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ší zdroje informací
- testování částí v .NET
Další kroky
V tomto kurzu jste otestovali knihovnu tříd. Knihovnu můžete zpřístupnit ostatním tak, že ji publikujete do NuGet 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:
Instalace a použití balíčku pomocí rozhraní příkazového řádku dotnet
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:
Sada Visual Studio Code extension C# Dev Kit poskytuje další nástroje pro vývoj aplikací a knihoven jazyka C#: