Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
- DescriptionAttribute
- IgnoreAttribute
- OwnerAttribute
- PriorityAttribute
- TestCategoryAttribute
- TestPropertyAttribute
- WorkItemAttribute
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: