Megosztás a következőn keresztül:


MSTest-attribútumok

Az MSTest egyéni attribútumokkal azonosítja és testre szabja a teszteket.

A tesztelési keretrendszer egyértelműbb áttekintése érdekében ez a szakasz a Microsoft.VisualStudio.TestTools.UnitTesting névtér tagjait kapcsolódó funkciók csoportjaiba rendezi.

Feljegyzés

Azok az attribútumok, amelyeknek a neve "Attribútum" végződésű, a végén "Attribútum" vagy anélkül használhatók. A paraméter nélküli konstruktorokkal rendelkező attribútumok zárójelekkel vagy anélkül írhatók. A következő kódpéldák azonos módon működnek:

[TestClass()]

[TestClassAttribute()]

[TestClass]

[TestClassAttribute]

A tesztosztályok és metódusok azonosítására használt attribútumok

Minden tesztosztálynak rendelkeznie kell az TestClass attribútummal, és minden tesztmetódusnak rendelkeznie kell az TestMethod attribútummal.

TestClassAttribute

A TestClass attribútum egy teszteket tartalmazó osztályt jelöl, és opcionálisan inicializálja vagy törli a metódusokat.

Ez az attribútum kiterjeszthető az alapértelmezett viselkedés módosítására vagy kiterjesztésére.

Példa:

[TestClass]
public class MyTestClass
{
}

TestMethodAttribute

A TestMethod attribútumot a rendszer egy TestClass adott tesztkörnyezetben használja a futtatandó tényleges vizsgálati módszer meghatározásához.

A metódusnak olyan példánymetódusnak public kell lennie, amely voidaz , Taskvagy ValueTask (az MSTest 3.3-as verziójától kezdve) van definiálva. Lehet, async de nem szabad async void.

A metódusnak nulla paraméterrel kell rendelkeznie, kivéve, ha a DataRow attribútummal, a DynamicData attribútummal vagy egy hasonló attribútummal van megjelölve, amely tesztesetadatokat biztosít a tesztmetódus számára.

Vegye figyelembe a következő példatesztosztályt:

[TestClass]
public class MyTestClass
{
    [TestMethod]
    public void TestMethod()
    {
    }
}

Az adatvezérelt teszteléshez használt attribútumok

Az adatvezérelt tesztek beállításához használja az alábbi elemeket. További információ: Adatvezérelt egységteszt létrehozása és adatforrás definiálása konfigurációs fájl használatával.

Jótanács

Az MSTest natív módon nem támogatja a kombinatorikus tesztelést, de ezt a képességet a nyílt forráskódú Combinatorial.MSTest NuGet csomag használatával is hozzáadhatja. A közösség aktívan tartja karban , és elérhető a GitHubon. Ezt a csomagot a Microsoft nem tartja karban.

DataRowAttribute

A DataRow attribútum lehetővé teszi ugyanazt a tesztmetódus futtatását több különböző bemenettel. Egy vagy több alkalommal is megjelenhet egy tesztmetódusban. Ezt a TestMethod attribútummal kell kombinálni.

Az argumentumok számának és típusának pontosan meg kell egyeznie a vizsgálati módszer aláírásával. Tekintse meg az alábbi példát egy érvényes tesztosztályra, amely a DataRowAttribute használatát mutatja be beágyazott argumentumokkal, amelyek a tesztelési módszer paramétereihez igazodnak:

[TestClass]
public class TestClass
{
    [TestMethod]
    [DataRow(1, "message", true, 2.0)]
    public void TestMethod1(int i, string s, bool b, float f)
    {
        // Omitted for brevity.
    }

    [TestMethod]
    [DataRow(new string[] { "line1", "line2" })]
    public void TestMethod2(string[] lines)
    {
        // Omitted for brevity.
    }

    [TestMethod]
    [DataRow(null)]
    public void TestMethod3(object o)
    {
        // Omitted for brevity.
    }

    [TestMethod]
    [DataRow(new string[] { "line1", "line2" }, new string[] { "line1.", "line2." })]
    public void TestMethod4(string[] input, string[] expectedOutput)
    {
        // Omitted for brevity.
    }
}

Feljegyzés

A funkcióval params a rendszer több bemenetét DataRowAttributeis rögzítheti.

[TestClass]
public class TestClass
{
    [TestMethod]
    [DataRow(1, 2, 3, 4)]
    public void TestMethod(params int[] values) {}
}

Példák érvénytelen kombinációkra:

[TestClass]
public class TestClass
{
    [TestMethod]
    [DataRow(1, 2)] // Not valid, we are passing 2 inline data but signature expects 1
    public void TestMethod1(int i) {}

    [TestMethod]
    [DataRow(1)] // Not valid, we are passing 1 inline data but signature expects 2
    public void TestMethod2(int i, int j) {}

    [TestMethod]
    [DataRow(1)] // Not valid, count matches but types do not match
    public void TestMethod3(string s) {}
}

Feljegyzés

Az MSTest v3-tól kezdve, ha pontosan 2 tömböt szeretne átadni, már nem kell a második tömböt egy objektumtömbbe burkolnia. Előtt:[DataRow(new string[] { "a" }, new object[] { new string[] { "b" } })]Kezdés a 3-as verzióval:[DataRow(new string[] { "a" }, new string[] { "b" })]

A tulajdonság beállításával módosíthatja a Visual Studióban és a naplózókban DataRowAttribute használt megjelenítendő nevet.DisplayName

[TestClass]
public class TestClass
{
    [TestMethod]
    [DataRow(1, 2, DisplayName = "Functional Case FC100.1")]
    public void TestMethod(int i, int j) {}
}

A DataRowöröklésével saját speciális DataRowAttribute attribútumot is létrehozhat.

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyCustomDataRowAttribute : DataRowAttribute
{
}

[TestClass]
public class TestClass
{
    [TestMethod]
    [MyCustomDataRow(1)]
    public void TestMethod(int i) {}
}

Inicializáláshoz és törléshez használt attribútumok

A több teszthez gyakran használt beállítás és törlés egy külön módszerrel nyerhető ki, és az alább felsorolt attribútumok egyikével megjelölve, a megfelelő időben, például minden teszt előtt futtatható. További információ: Egységteszt anatómiája.

Összeszerelési szint

Az AssemblyInitialize attribútum közvetlenül a szerelvény betöltése után, a AssemblyCleanup attribútum pedig közvetlenül a szerelvény eltávolítása előtt lesz meghívva.

Az ezekkel az attribútumokkal megjelölt metódusokat static void, static Task vagy static ValueTask (MSTest 3.3-as verziótól kezdődően)ként kell definiálni egy TestClassAttributemegjelölt osztályban, és csak egyszer jelenik meg. Az inicializálási részhez egy TestContext típusú paraméterre van szükség, és a törléshez vagy nincs paraméter, vagy az MSTest 3.8-tól kezdve egy TestContexttípusú paraméterrel rendelkezhet.

[TestClass]
public class MyTestClass
{
    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext testContext)
    {
    }

    [AssemblyCleanup]
    public static void AssemblyCleanup() // Starting with MSTest 3.8, it can be AssemblyCleanup(TestContext testContext)
    {
    }
}

Osztályszint

A ClassInitialize attribútum közvetlenül az osztály betöltése előtt (de a statikus konstruktor után) meghívódik, a ClassCleanup pedig közvetlenül az osztály eltávolítása után meghívódik.

Fontos

Alapértelmezés szerint a ClassCleanupAttribute a szerelvény utolsó tesztje után aktiválódik (hasonlóan a AssemblyCleanupAttribute). Ezt a viselkedést az attribútum CleanupBehavior beállításával módosíthatja. Alternatív megoldásként ezt a viselkedést globálisan alkalmazhatja az assembly-hez a ClassCleanupExecutionAttributeszerelvény attribútum használatával.

Az öröklési viselkedést is szabályozhatja: csak az aktuális osztályhoz InheritanceBehavior.Nonehasználatával, vagy az összes származtatott osztályhoz InheritanceBehavior.BeforeEachDerivedClasshasználatával.

Az ezekkel az attribútumokkal megjelölt metódusokat egy , vagy static void (MSTest 3.3-as verziótól kezdődően) static Taskértékként static ValueTaskTestClass kell definiálni, és csak egyszer kell megjelenniük. Az inicializálási részhez egy TestContext típusú paraméterre van szükség, és a törléshez vagy nincs paraméter, vagy az MSTest 3.8-tól kezdve egy TestContexttípusú paraméterrel rendelkezhet.

[TestClass]
public class MyTestClass
{
    [ClassInitialize]
    public static void ClassInitialize(TestContext testContext)
    {
    }

    [ClassCleanup]
    public static void ClassCleanup() // Starting with MSTest 3.8, it can be ClassCleanup(TestContext testContext)
    {
    }
}

Tesztszint

A TestInitialize attribútum közvetlenül a teszt megkezdése előtt lesz meghívva, és a teszt befejezése után a TestCleanup lesz meghívva.

Ez TestInitializeAttribute hasonló az osztálykonstruktorhoz, de általában alkalmasabb hosszú vagy aszinkron inicializációkhoz. A TestInitializeAttribute-t mindig a konstruktor hívása után hívjuk meg, és minden teszthez meghívásra kerül (beleértve a adatvezérelt tesztekminden bejegyzését).

Ez TestCleanupAttribute az osztályhoz Dispose (vagy DisposeAsync) hasonló, de általában alkalmasabb hosszú vagy aszinkron törlésre. A TestCleanupAttribute-t mindig közvetlenül a DisposeAsync/Dispose előtt hívják meg, és minden egyes teszthez meghívják (beleértve a adatvezérelt tesztekminden egyes bejegyzését).

Az attribútumokkal megjelölt metódusokat paraméter nélküliként voidkell definiálni, Task vagy ValueTask (az MSTest 3.3-as verziójától kezdve) TestClassparaméter nélküliként kell megadni, és egy vagy több alkalommal kell megjelenniük.

[TestClass]
public class MyTestClass
{
    [TestInitialize]
    public void TestInitialize()
    {
    }

    [TestCleanup]
    public void TestCleanup()
    {
    }
}

A tesztelés végrehajtásának szabályozásához használt attribútumok

A tesztek végrehajtásának módosításához az alábbi attribútumok használhatók.

TimeoutAttribute

Az Időtúllépés attribútummal ezredmásodpercben megadhatja, hogy egy tesztmetódus futtatható-e. Ha a tesztmetódus a megadott időnél hosszabb ideig fut, a rendszer megszakítja a tesztet, és sikertelenként jelöli meg.

Ez az attribútum bármilyen vizsgálati vagy rögzített módszerre alkalmazható (inicializálási és tisztítási módszerek). A runsettings-fájl időtúllépési tulajdonságainak használatával globálisan is megadhatja az időtúllépést az összes tesztmetelyhez vagy az összes tesztelési rögzítési módszerhez.

Feljegyzés

Az időtúllépés nem garantáltan pontos. A teszt a megadott idő leteltét követően megszakad, de a lépés megszakítása hosszabb időt vehet igénybe.

Az időtúllépési funkció használatakor külön szál/feladat jön létre a tesztelési módszer futtatásához. A fő szál/tevékenység felelős az időtúllépés monitorozásáért és a metódusszál/tevékenység figyeléséért, ha eléri az időtúllépést.

Az MSTest 3.6-tól kezdve az attribútum tulajdonságát (vagy globálisan runsettings használatával) lehet megadni CooperativeCancellation a kooperatív lemondás engedélyezéséhez. Ebben a módban a metódus felelős a lemondási jogkivonat ellenőrzéséért és a teszt megszakításáért, ha azt a szokásos async módszerhez hasonlóan jelzi. Ez a mód nagyobb teljesítményű, és pontosabb vezérlést tesz lehetővé a lemondási folyamat felett. Ez a mód az aszinkron és a szinkronizálási módszerekre is alkalmazható.

STATestClassAttribute

Tesztosztályra alkalmazva a STATestClass attribútum azt jelzi, hogy az osztály összes vizsgálati módszerét (és [ClassInitialize] és [ClassCleanup] metódusát) egyszálas lakásban (STA) kell futtatni. Ez az attribútum akkor hasznos, ha a tesztmetódusok sta-t igénylő COM-objektumokkal kommunikálnak.

Feljegyzés

Ez csak Windows rendszeren és a 3.6-os és újabb verziókban támogatott.

STATestMethodAttribute

A tesztelési módszer alkalmazásakor a STATestMethod attribútum azt jelzi, hogy a vizsgálati módszert egy egyszálas lakásban (STA) kell futtatni. Ez az attribútum akkor hasznos, ha a tesztmetódus olyan COM-objektumokkal kommunikál, amelyek sta-t igényelnek.

Feljegyzés

Ez csak Windows rendszeren és a 3.6-os és újabb verziókban támogatott.

ParallelizeAttribute

Alapértelmezés szerint az MSTest szekvenciális sorrendben futtatja a teszteket. A szerelvényszintű attribútum Párhuzamosítás attribútum használható a tesztek párhuzamos futtatásához. Megadhatja, hogy a párhuzamosságnak osztályszinten kell-e lennie (több osztály is futtatható párhuzamosan, de egy adott osztály tesztjei egymás után futnak) vagy metódusszinten.

Megadhatja a párhuzamos végrehajtáshoz használandó szálak maximális számát is. 0 Az érték (alapértelmezett érték) azt jelenti, hogy a szálak száma megegyezik a gép logikai processzorainak számával.

A runsettings fájl párhuzamosítási tulajdonságain keresztül is megadható a párhuzamosság.

DoNotParallelizeAttribute

A DoNotParallelize attribútum használatával megakadályozhatja a tesztek párhuzamos végrehajtását egy adott szerelvényben. Ez az attribútum a szerelvény, az osztály vagy a metódus szintjén alkalmazható.

Feljegyzés

Alapértelmezés szerint az MSTest szekvenciális sorrendben futtatja a teszteket, így csak akkor kell ezt az attribútumot használnia, ha alkalmazta a szerelvényszintű Párhuzamosít attribútumot.

RetryAttribute

A Retry attribútum az MSTest 3.8-ban lett bevezetve. Ez az attribútum azt eredményezi, hogy a tesztmetódus újra próbálkozik sikertelenség vagy időtúllépés esetén. Ez lehetővé teszi az újrapróbálkozások maximális számának, az újrapróbálkozások közötti késleltetésnek és a késleltetési visszalépés típusának megadását, amely állandó vagy exponenciális.

A tesztmetóduson várhatóan csak egy RetryAttribute jelenik meg, és RetryAttribute nem használható TestMethodjelöléssel nem rendelkező metódusokon.

Feljegyzés

Az RetryAttribute egy absztrakt RetryBaseAttribute-ből származik. Saját újrapróbálkozási implementációkat is létrehozhat, ha a beépített RetryAttribute nem elégíti ki az Ön igényeit.

Segédprogram-attribútumok

DeploymentItemAttribute

A DeploymentItem attribútum a központi telepítési könyvtárba központi telepítési elemként megadott fájlok vagy mappák másolására szolgál (egyéni kimeneti elérési út hozzáadása nélkül a másolt fájlok TestResults mappában lesznek a projektmappában). Az üzembehelyezési könyvtárban található az összes üzembe helyezési elem, valamint a tesztprojekt DLL-je.

Használható tesztosztályokon (TestClass attribútummal megjelölt osztályokon) vagy tesztelési módszereken (TestMethod attribútummal megjelölt metódusokon).

A felhasználók az attribútum több példányával is rendelkezhetnek egynél több elem megadásához.

És itt láthatja a konstruktorokat.

Példa

[TestClass]
[DeploymentItem(@"C:\classLevelDepItem.xml")]   // Copy file using some absolute path
public class UnitTest1
{
    [TestMethod]
    [DeploymentItem(@"..\..\methodLevelDepItem1.xml")]   // Copy file using a relative path from the dll output location
    [DeploymentItem(@"C:\DataFiles\methodLevelDepItem2.xml", "SampleDataFiles")]   // File will be added under a SampleDataFiles in the deployment directory
    public void TestMethod1()
    {
        string textFromFile = File.ReadAllText("classLevelDepItem.xml");
    }
}

Figyelmeztetés

Nem javasoljuk ennek az attribútumnak a használatát a fájlok központi telepítési könyvtárba való másolásához.

ExpectedExceptionAttribute

A ExpectedException attribútum határozza meg azt a kivételt, amelyet a vizsgálati módszer várhatóan eldob. A teszt akkor megy végbe, ha a várt kivétel ki lesz dobva, és a kivételüzenet megegyezik a várt üzenettel.

Figyelmeztetés

Ez az attribútum a visszamenőleges kompatibilitás érdekében létezik, és nem ajánlott új tesztekhez. Ehelyett használja a Assert.ThrowsException (vagy Assert.ThrowsExactly, ha az MSTest 3.8 vagy újabb verziót használja) metódust.

Metaadat-attribútumok

Az alábbi attribútumok és a hozzájuk rendelt értékek egy adott tesztmetódus Tulajdonságok ablakában Visual Studiojelennek meg. Ezek az attribútumok nem a teszt kódjában érhetők el. Ehelyett hatással vannak a teszt felhasználási vagy futtatási módjára, akár a Visual Studio IDE-jén, akár a Visual Studio tesztmotoron keresztül. Ezen attribútumok némelyike például oszlopként jelenik meg a Test Manager és a Teszteredmények ablakban, ami azt jelenti, hogy a teszteket és a teszteredményeket csoportosíthatja és rendezheti. Az egyik ilyen attribútum, TestPropertyAttributeamellyel tetszőleges metaadatokat adhat hozzá a tesztekhez.

Használhatja például a teszt által lefedett "tesztbérlet" nevének tárolására, ha megjelöli a tesztet a következővel [TestProperty("Feature", "Accessibility")]: . Vagy használhatja arra is, hogy egy mutatót tároljon a teszt [TestProperty("ProductMilestone", "42")]típusáról. Az attribútummal létrehozott tulajdonság és a hozzárendelt tulajdonságérték egyaránt megjelenik a Visual Studio Tulajdonságok ablakában, a Teszt adott fejléc alatt.

Az alábbi attribútumok a csapatprojektek projekthierarchiájában lévő entitásokhoz dekorált tesztelési Team Foundation Server módszert kapcsolják össze: