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.
Ez a cikk bemutatja, hogyan hozhat létre egyéni tesztelési keretrendszert a Microsoft.Testing.Platform számára. A tesztelési keretrendszer az egyetlen kötelező bővítmény. Felderíti és futtatja a teszteket, és jelentéseket készít az eredményekről a platformon.
A bővítménypont teljes összefoglalását és a folyamaton belüli/folyamaton kívüli fogalmakat az egyéni bővítmények létrehozása című témakörben talál.
Ha meglévő VSTest-alapú tesztelési keretrendszert migrál, a ITestFramework felület natív implementálása az ajánlott módszer. A VSTest Bridge bővítmény átmeneti lépésként érhető el, de a natív implementáció biztosítja a legjobb élményt.
Tesztelési keretrendszer bővítménye
A tesztelési keretrendszer az elsődleges bővítmény, amely lehetővé teszi a tesztelési platform számára a tesztek felderítését és végrehajtását. A tesztelési keretrendszer feladata, hogy a tesztek eredményeit visszakossa a tesztelési platformra. A tesztkörnyezet az egyetlen kötelező bővítmény, amely egy tesztelési munkamenet végrehajtásához szükséges.
Tesztelési keretrendszer regisztrálása
Ez a szakasz bemutatja, hogyan regisztrálhatja a tesztelési keretrendszert a tesztelési platformon. Tesztalkalmazás-készítőnként csak egy tesztelési keretrendszert regisztrálhat a TestApplication.RegisterTestFrameworkMicrosoft.Testing.Platform architektúra dokumentációjában látható API használatával.
A regisztrációs API a következőképpen van definiálva:
ITestApplicationBuilder RegisterTestFramework(
Func<IServiceProvider, ITestFrameworkCapabilities> capabilitiesFactory,
Func<ITestFrameworkCapabilities, IServiceProvider, ITestFramework> adapterFactory);
A RegisterTestFramework API két gyárat vár:
Func<IServiceProvider, ITestFrameworkCapabilities>: Ez a meghatalmazott elfogadja aIServiceProviderfelületet implementáló objektumot, és visszaad egy objektumot, amely megvalósítja aITestFrameworkCapabilitiesfelületet. AIServiceProviderhozzáférést biztosít a platformszolgáltatásokhoz, például konfigurációkhoz, naplózókhoz és parancssori argumentumokhoz.A
ITestFrameworkCapabilitiesfelület a tesztelési keretrendszer által támogatott képességek platformra és bővítményekre való bejelentésére szolgál. Lehetővé teszi, hogy a platform és a bővítmények megfelelően működjenek együtt bizonyos viselkedések implementálásával és támogatásával. A képességek fogalmának jobb megértéséhez tekintse meg a megfelelő szakaszt.Func<ITestFrameworkCapabilities, IServiceProvider, ITestFramework>: Ez egy delegált, amely egy ITestFrameworkCapabilities objektumot vesz fel, amely aFunc<IServiceProvider, ITestFrameworkCapabilities>által visszaadott példány, és egy IServiceProvider-t, amely ismét hozzáférést biztosít a platformszolgáltatásokhoz. A várt visszatérési objektum az, amely implementálja az ITestFramework felületet. AITestFrameworkszolgál a teszteket felderítő és futtató végrehajtó motorként, majd visszaküldi az eredményeket a tesztelési platformnak.
A platformnak el kell különítenie a ITestFrameworkCapabilities létrehozását és a ITestFramework létrehozását, hogy elkerülje a tesztelési keretrendszer létrehozását, ha a támogatott képességek nem elegendőek az aktuális tesztelési munkamenet végrehajtásához.
Tekintse meg a következő felhasználói kód példáját, amely egy üres képességkészletet visszaadó tesztelési keretrendszer-regisztrációt mutat be:
internal class TestingFrameworkCapabilities : ITestFrameworkCapabilities
{
public IReadOnlyCollection<ITestFrameworkCapability> Capabilities => [];
}
internal class TestingFramework : ITestFramework
{
public TestingFramework(ITestFrameworkCapabilities capabilities, IServiceProvider serviceProvider)
{
// ...
}
// Omitted for brevity...
}
public static class TestingFrameworkExtensions
{
public static void AddTestingFramework(this ITestApplicationBuilder builder)
{
builder.RegisterTestFramework(
_ => new TestingFrameworkCapabilities(),
(capabilities, serviceProvider) => new TestingFramework(capabilities, serviceProvider));
}
}
// ...
Most vegye figyelembe a példa megfelelő belépési pontját a regisztrációs kóddal:
var testApplicationBuilder = await TestApplication.CreateBuilderAsync(args);
// Register the testing framework
testApplicationBuilder.AddTestingFramework();
using var testApplication = await testApplicationBuilder.BuildAsync();
return await testApplication.RunAsync();
Megjegyzés:
Az üres ITestFrameworkCapabilities visszaadása nem akadályozhatja meg a tesztmunkamenet végrehajtását. Minden tesztelési keretrendszernek képesnek kell lennie a tesztek felderítésére és futtatására. A hatást olyan bővítményekre kell korlátozni, amelyek kikapcsolhatnak, ha a tesztelési keretrendszer nem rendelkezik bizonyos funkcióval.
Tesztelési keretrendszer létrehozása
A Microsoft.Testing.Platform.Extensions.TestFramework.ITestFramework-t a tesztelési keretrendszert biztosító bővítmények implementálják.
public interface ITestFramework : IExtension
{
Task<CreateTestSessionResult> CreateTestSessionAsync(CreateTestSessionContext context);
Task ExecuteRequestAsync(ExecuteRequestContext context);
Task<CloseTestSessionResult> CloseTestSessionAsync(CloseTestSessionContext context);
}
A IExtension felület
Az ITestFramework interfész örökli az IExtension interfészt, amely egy olyan felület, amelytől minden bővítménypont örököl.
IExtension a bővítmény nevének és leírásának lekérésére szolgál. A IExtension lehetővé teszi a bővítmény dinamikus engedélyezését vagy letiltását a telepítés során, Task<bool> IsEnabledAsync()keresztül. Győződjön meg arról, hogy visszatér true e függvényből, ha nincs különleges követelménye annak letiltására.
A CreateTestSessionAsync metódus
A CreateTestSessionAsync metódust a tesztmunkamenet elején hívjuk meg, és a tesztelési keretrendszer inicializálására szolgál. Az API elfogad egy CreateTestSessionContext objektumot, és visszaad egy CreateTestSessionResult.
public sealed class CreateTestSessionContext : TestSessionContext
{
public CancellationToken CancellationToken { get; }
}
A SessionUid tulajdonság a TestSessionContext következőből öröklődik (lásd a TestSessionContext szakaszt).
A CancellationToken a CreateTestSessionAsyncvégrehajtásának leállítására szolgál.
A visszatérési objektum egy CreateTestSessionResult:
public sealed class CreateTestSessionResult
{
public string? WarningMessage { get; set; }
public string? ErrorMessage { get; set; }
public bool IsSuccess { get; set; }
}
A IsSuccess tulajdonság jelzi, hogy a munkamenet létrehozása sikeres volt-e. Amikor falsead vissza, a teszt végrehajtása leáll.
A CloseTestSessionAsync metódus
A CloseTestSessionAsync metódus funkció szempontjából a CreateTestSessionAsync ellentéte, az egyetlen különbség az objektumnevekben van. További információért lásd a(z) CreateTestSessionAsync szakaszt.
A ExecuteRequestAsync metódus
A ExecuteRequestAsync metódus egy ExecuteRequestContexttípusú objektumot fogad el. Ez az objektum, ahogy a neve is sugallja, tartalmazza a tesztelési keretrendszer által várhatóan végrehajtandó műveletre vonatkozó részleteket.
A ExecuteRequestContext definíciója a következő:
public sealed class ExecuteRequestContext
{
public IRequest Request { get; }
public IMessageBus MessageBus { get; }
public CancellationToken CancellationToken { get; }
public void Complete();
}
IRequest: Ez minden típusú kérelem alapfelülete. Gondolj a tesztelési keretrendszerre úgy, mint egy folyamaton belüli állapotalapú kiszolgálóra, ahol az életciklus a következő:
Az előző ábrán látható, hogy a tesztelési platform három kérést ad ki a tesztelési keretrendszer példányának létrehozása után. A tesztelési keretrendszer feldolgozza ezeket a kéréseket, és a kérés részét képező IMessageBus szolgáltatást használja az egyes kérések eredményének kézbesítéséhez. Egy adott kérés kezelése után a tesztelési keretrendszer meghívja rajta a Complete() metódust, jelezve a tesztelési platformnak, hogy a kérés teljesült.
A tesztelési platform figyeli az összes elküldött kérést. Miután az összes kérés teljesült, meghívja a CloseTestSessionAsync, és megsemmisíti a példányt (ha IDisposable/IAsyncDisposable implementálva van).
Nyilvánvaló, hogy a kérések és azok befejezései átfedésben lehetnek, ami lehetővé teszi a kérések egyidejű és aszinkron végrehajtását.
Megjegyzés:
A tesztelési platform jelenleg nem küld átfedő kéréseket, és a következő elküldése előtt megvárja a kérések befejezését >>. Ez a viselkedés azonban a jövőben változhat. Az egyidejű kérések támogatását az képességek rendszer határozza meg.
A IRequest implementáció határozza meg a teljesítendő pontos kérést. A tesztelési keretrendszer azonosítja a kérés típusát, és ennek megfelelően kezeli azt. Ha a kérelem típusa ismeretlen, kivételt kell emelni.
Az elérhető kérésekről az IRequest szakaszban talál részletes információkat.
IMessageBus: Ez a kérelemhez társított szolgáltatás lehetővé teszi, hogy a tesztelési keretrendszer aszinkron módon közzétenni a folyamatban lévő kéréssel kapcsolatos információkat a tesztelési platformon.
Az üzenetbusz a platform központi központjaként szolgál, és megkönnyíti az aszinkron kommunikációt az összes platformösszetevő és -bővítmény között.
A tesztelési platformon közzétehető információk átfogó listájáért tekintse meg az IMessageBus szakaszt.
CancellationToken: Ez az azonosító a feldolgozás megszakítására szolgál egy adott kérés esetén.
Complete(): Ahogyan az előző sorozatban is látható, a Complete metódus értesíti a platformot arról, hogy a kérelem sikeresen feldolgozásra került, és hogy az összes releváns információ átadásra került a IMessageBusrészére.
Figyelmeztetés
Ha figyelmen kívül hagyja a Complete() meghívását a kérelemben, a tesztalkalmazás nem válaszol.
Ha testre szeretné szabni a tesztelési keretrendszert a követelményeknek vagy a felhasználók igényeinek megfelelően, használhat egy személyre szabott szakaszt a konfigurációs fájlban, vagy egyéni parancssori beállításokkal.
Kérelmek kezelése
A következő szakasz részletes leírást nyújt a tesztelési keretrendszer által fogadott és feldolgozott különböző kérelmekről.
Mielőtt továbblépnénk a következő szakaszra, elengedhetetlen, hogy alaposan megértsd az IMessageBusfogalmát, amely a tesztvégrehajtási információk tesztelési platformhoz való továbbításának alapvető szolgáltatása.
TestSessionContext
A TestSessionContext minden kérés megosztott tulajdonsága, amely a folyamatban lévő tesztelési munkamenetről nyújt információt:
public class TestSessionContext
{
public SessionUid SessionUid { get; }
}
public readonly struct SessionUid(string value)
{
public string Value { get; }
}
A TestSessionContext tartalmazza a SessionUid-et, amely a folyamatban lévő tesztelési munkamenet egyedi azonosítója, és segíti a munkamenet adatainak naplózását és korrelálását.
TesztVégrehajtásiKérelemFelfedezése
public class DiscoverTestExecutionRequest
{
public TestSessionContext Session { get; }
public ITestExecutionFilter Filter { get; }
}
A DiscoverTestExecutionRequest utasítja a tesztelési keretrendszert , hogy felderítse a teszteket, és közvetítse ezt az információt az IMessageBus-re.
Az előző szakaszban leírtak szerint a felderített teszt tulajdonsága DiscoveredTestNodeStateProperty. Íme egy általános kódrészlet a hivatkozáshoz:
var testNode = new TestNode
{
Uid = GenerateUniqueStableId(),
DisplayName = GetDisplayName(),
Properties = new PropertyBag(
DiscoveredTestNodeStateProperty.CachedInstance),
};
await context.MessageBus.PublishAsync(
this,
new TestNodeUpdateMessage(
discoverTestExecutionRequest.Session.SessionUid,
testNode));
// ...
TesztFuttatásKérés
public class RunTestExecutionRequest
{
public TestSessionContext Session { get; }
public ITestExecutionFilter Filter { get; }
}
A RunTestExecutionRequest utasítja a tesztelési keretrendszert , hogy hajtsa végre a teszteket, és közölje ezeket az információkat az IMessageBus.
Íme egy általános kódrészlet a hivatkozáshoz:
var skippedTestNode = new TestNode()
{
Uid = GenerateUniqueStableId(),
DisplayName = GetDisplayName(),
Properties = new PropertyBag(
SkippedTestNodeStateProperty.CachedInstance),
};
await context.MessageBus.PublishAsync(
this,
new TestNodeUpdateMessage(
runTestExecutionRequest.Session.SessionUid,
skippedTestNode));
// ...
var successfulTestNode = new TestNode()
{
Uid = GenerateUniqueStableId(),
DisplayName = GetDisplayName(),
Properties = new PropertyBag(
PassedTestNodeStateProperty.CachedInstance),
};
await context.MessageBus.PublishAsync(
this,
new TestNodeUpdateMessage(
runTestExecutionRequest.Session.SessionUid,
successfulTestNode));
// ...
var assertionFailedTestNode = new TestNode()
{
Uid = GenerateUniqueStableId(),
DisplayName = GetDisplayName(),
Properties = new PropertyBag(
new FailedTestNodeStateProperty(assertionException)),
};
await context.MessageBus.PublishAsync(
this,
new TestNodeUpdateMessage(
runTestExecutionRequest.Session.SessionUid,
assertionFailedTestNode));
// ...
var failedTestNode = new TestNode()
{
Uid = GenerateUniqueStableId(),
DisplayName = GetDisplayName(),
Properties = new PropertyBag(
new ErrorTestNodeStateProperty(ex.InnerException!)),
};
await context.MessageBus.PublishAsync(
this,
new TestNodeUpdateMessage(
runTestExecutionRequest.Session.SessionUid,
failedTestNode));
A TestNodeUpdateMessage adatok
Ahogy az IMessageBus szakaszban is szerepel, az üzenetbusz használata előtt meg kell adnia a szolgáltatni kívánt adatok típusát. A tesztelési platform egy jól ismert típust , TestNodeUpdateMessagedefiniált, amely a tesztfrissítési információkfogalmát képviseli.
A dokumentum ezen része ismerteti, hogyan használhatja fel ezeket a hasznos adatokat. Vizsgáljuk meg a felületet:
public sealed class TestNodeUpdateMessage(
SessionUid sessionUid,
TestNode testNode,
TestNodeUid? parentTestNodeUid = null)
{
public TestNode TestNode { get; }
public TestNodeUid? ParentTestNodeUid { get; }
}
public class TestNode
{
public required TestNodeUid Uid { get; init; }
public required string DisplayName { get; init; }
public PropertyBag Properties { get; init; } = new();
}
public sealed class TestNodeUid(string value);
public sealed partial class PropertyBag
{
public PropertyBag();
public PropertyBag(params IProperty[] properties);
public PropertyBag(IEnumerable<IProperty> properties);
public int Count { get; }
public void Add(IProperty property);
public bool Any<TProperty>();
public TProperty? SingleOrDefault<TProperty>();
public TProperty Single<TProperty>();
public TProperty[] OfType<TProperty>();
public IEnumerable<IProperty> AsEnumerable();
public IEnumerator<IProperty> GetEnumerator();
...
}
public interface IProperty
{
}
TestNodeUpdateMessage: ATestNodeUpdateMessagekét tulajdonságból áll: egyTestNodeés egyParentTestNodeUid. AParentTestNodeUidazt jelzi, hogy egy tesztnek lehet szülőtesztje, amely bevezeti a tesztfa fogalmát,, aholTestNodeegymáshoz viszonyítva rendezhetők. Ez a struktúra lehetővé teszi a csomópontok közötti fa kapcsolaton alapuló jövőbeli fejlesztéseket és funkciókat. Ha a tesztelési keretrendszer nem igényel tesztfastruktúrát, akkor dönthet úgy, hogy nem használja, és egyszerűen null értékre állítja, ami egy egyszerű, síkTestNodelistát eredményez.TestNode: ATestNodehárom tulajdonságból áll, amelyek közül az egyik aUidtípusúTestNodeUid. Ez aUida csomópont EGYEDI STABIL AZONOSÍTÓ szolgál. A UNIQUE STABLE ID kifejezés azt jelenti, hogy ugyanazonTestNodeAZONOSUidkell fenntartania a különböző futtatások és operációs rendszerek között. ATestNodeUidegy tetszőleges átlátszatlan sztring, amelyet a tesztelési platform változtatás nélkül fogad el.
Fontos
Az azonosító stabilitása és egyedisége kulcsfontosságú a tesztelési tartományban. Lehetővé teszik egyetlen teszt pontos célzását a végrehajtáshoz, és lehetővé teszik, hogy az azonosító állandó azonosítóként szolgáljon egy teszthez, megkönnyítve a hatékony bővítményeket és funkciókat.
A második tulajdonság a DisplayName, amely a teszt emberbarát neve. Ez a név például a --list-tests parancssor végrehajtásakor jelenik meg.
A harmadik attribútum a Properties, amely egy PropertyBag típusú. Ahogy a kód is mutatja, ez egy speciális tulajdonságcsomag, amely a TestNodeUpdateMessageáltalános tulajdonságait tartalmazza. Ez azt jelenti, hogy bármely tulajdonságot hozzáfűzhet a csomóponthoz, amely megvalósítja a helyőrző felületet IProperty.
A tesztplatform azonosítja a TestNode.Properties hozzáadott tulajdonságokat annak megállapításához, hogy egy teszt sikeres, sikertelen vagy kihagyott-e.
Az elérhető tulajdonságok aktuális listáját a TestNodeUpdateMessage.TestNode szakaszban található relatív leírással találja.
A PropertyBag típus általában minden IData-ben elérhető, és felhasználható arra, hogy a platform és a bővítmények által lekérdezhető egyéb tulajdonságokat tároljon. Ez a mechanizmus lehetővé teszi, hogy új információkkal bővítse a platformot anélkül, hogy kompatibilitástörő változásokat vezetünk be. Ha egy összetevő felismeri a tulajdonságot, lekérdezheti azt; ellenkező esetben figyelmen kívül fogja hagyni.
Végül ez a szakasz egyértelművé teszi, hogy a teszt keretrendszer implementálásának el kell készítenie az IDataProducer-t, amely TestNodeUpdateMessage-eket hoz létre az alábbi mintában:
internal sealed class TestingFramework
: ITestFramework, IDataProducer
{
// ...
public Type[] DataTypesProduced =>
[
typeof(TestNodeUpdateMessage)
];
// ...
}
Ha a tesztadapterhez fájlok közzététele szükséges a végrehajtás során, ebben a forrásfájlban megtalálja a felismert tulajdonságokat: https://github.com/microsoft/testfx/blob/main/src/Platform/Microsoft.Testing.Platform/Messages/FileArtifacts.cs. Mint látható, általánosan adhat meg fájlokat, vagy társíthatja őket egy adott TestNode-hoz. Ne feledje, hogy ha le szeretne küldeni egy SessionFileArtifact, azt előzetesen deklarálnia kell a platformon, az alábbiak szerint:
internal sealed class TestingFramework
: ITestFramework, IDataProducer
{
// ...
public Type[] DataTypesProduced =>
[
typeof(TestNodeUpdateMessage),
typeof(SessionFileArtifact)
];
// ...
}
Jól ismert tulajdonságok
A kérések szakaszban leírtak szerint a tesztplatform azonosítja a megadott tulajdonságokat, amelyek hozzá TestNodeUpdateMessage vannak adva egy TestNode adott állapot meghatározásához (például sikeres, sikertelen, kihagyott stb.). Ez lehetővé teszi, hogy a futtatókörnyezet pontosan megjelenítse a sikertelen tesztek listáját a megfelelő információkkal a konzolon, és beállítsa a tesztelési folyamathoz szükséges kilépési kódot.
Ebben a szegmensben ismertetjük a különböző jól ismert IProperty lehetőségeket és azok következményeit.
A jól ismert tulajdonságok átfogó listájáért tekintse meg a TestNodeProperties.cs. Ha azt tapasztalja, hogy hiányzik egy tulajdonságleírás, kérjük, jelezzen egy problémát.
Ezek a tulajdonságok a következő kategóriákba oszthatók:
- Általános információk: Bármilyen kéréshez megadható tulajdonságok.
-
Felderítési információk: A
DiscoverTestExecutionRequestfelderítési kérelem során megadott tulajdonságok. -
Végrehajtási adatok: A tesztvégrehajtási kérelem során megadott tulajdonságok
RunTestExecutionRequest.
Bizonyos tulajdonságok szükségesek, míg mások nem kötelezőek. A kötelező tulajdonságok szükségesek az alapvető tesztelési funkciók biztosításához, például a sikertelen tesztek jelentéséhez, valamint annak jelzéséhez, hogy a teljes tesztmunkamenet sikeres volt-e.
Az opcionális tulajdonságok viszont további információk megadásával javítják a tesztelési élményt. Különösen hasznosak IDE-forgatókönyvekben (például VS, VSCode stb.), konzolfuttatásokban, vagy olyan bővítmények támogatásakor, amelyek részletesebb információkat igényelnek a megfelelő működéshez. Ezek az opcionális tulajdonságok azonban nem befolyásolják a tesztek végrehajtását.
Megjegyzés:
A bővítmények riasztással és kivételek kezelésével vannak megbízva, ha adott információkra van szükségük a megfelelő működéshez. Ha egy bővítmény nem rendelkezik a szükséges információkkal, az nem okozhatja a teszt végrehajtásának meghiúsulását, hanem egyszerűen le kell tiltani.
Általános információk
public record KeyValuePairStringProperty(
string Key,
string Value)
: IProperty;
A KeyValuePairStringProperty egy általános kulcs/érték pár adatait jelenti.
public record struct LinePosition(
int Line,
int Column);
public record struct LinePositionSpan(
LinePosition Start,
LinePosition End);
public abstract record FileLocationProperty(
string FilePath,
LinePositionSpan LineSpan)
: IProperty;
public sealed record TestFileLocationProperty(
string FilePath,
LinePositionSpan LineSpan)
: FileLocationProperty(FilePath, LineSpan);
TestFileLocationProperty a teszt helyének a forrásfájlban való rögzítésére szolgál. Ez különösen akkor hasznos, ha a kezdeményező egy IDE, például Visual Studio vagy Visual Studio Code.
public sealed record TestMethodIdentifierProperty(
string AssemblyFullName,
string Namespace,
string TypeName,
string MethodName,
string[] ParameterTypeFullNames,
string ReturnTypeFullName)
TestMethodIdentifierProperty egy tesztmetódus egyedi azonosítója.
public sealed record TestMetadataProperty(
string Key,
string Value)
TestMetadataProperty-t a jellemzőinek vagy a TestNode kifejezésére használják.
Felderítési információk
public sealed record DiscoveredTestNodeStateProperty(
string? Explanation = null)
{
public static DiscoveredTestNodeStateProperty CachedInstance { get; }
}
A DiscoveredTestNodeStateProperty azt jelzi, hogy ezt a Tesztcsomópontot felfedezték. Ezt használják, amikor egy DiscoverTestExecutionRequest-át elküldenek a tesztelési keretrendszernek.
Vegye figyelembe a CachedInstance tulajdonság által kínált praktikus gyorsítótárazott értéket.
Ez a tulajdonság kötelező .
Végrehajtási adatok
public sealed record InProgressTestNodeStateProperty(
string? Explanation = null)
{
public static InProgressTestNodeStateProperty CachedInstance { get; }
}
A InProgressTestNodeStateProperty tájékoztatja a tesztelési platformot, hogy a TestNode végrehajtásra lett ütemezve, és jelenleg folyamatban van.
Vegye figyelembe a CachedInstance tulajdonság által kínált praktikus gyorsítótárazott értéket.
public readonly record struct TimingInfo(
DateTimeOffset StartTime,
DateTimeOffset EndTime,
TimeSpan Duration);
public sealed record StepTimingInfo(
string Id,
string Description,
TimingInfo Timing);
public sealed record TimingProperty : IProperty
{
public TimingProperty(TimingInfo globalTiming)
: this(globalTiming, [])
{
}
public TimingProperty(
TimingInfo globalTiming,
StepTimingInfo[] stepTimings)
{
GlobalTiming = globalTiming;
StepTimings = stepTimings;
}
public TimingInfo GlobalTiming { get; }
public StepTimingInfo[] StepTimings { get; }
}
A TimingProperty a TestNode végrehajtásával kapcsolatos időzítési adatok továbbítására használható. Emellett lehetővé teszi az egyes végrehajtási lépések időzítését StepTimingInfokeresztül. Ez különösen akkor hasznos, ha a tesztkoncepció több fázisra van osztva, például inicializálásra, végrehajtásra és törlésre.
A következő tulajdonságok közül csak egyszükségesTestNode, és közli a TestNode eredményét a tesztelési platformmal.
public sealed record PassedTestNodeStateProperty(
string? Explanation = null)
: TestNodeStateProperty(Explanation)
{
public static PassedTestNodeStateProperty CachedInstance
{ get; } = new PassedTestNodeStateProperty();
}
PassedTestNodeStateProperty értesíti a tesztelési platformot, hogy a TestNode sikeresen teljesítve lett.
Vegye figyelembe a CachedInstance tulajdonság által kínált praktikus gyorsítótárazott értéket.
public sealed record SkippedTestNodeStateProperty(
string? Explanation = null)
: TestNodeStateProperty(Explanation)
{
public static SkippedTestNodeStateProperty CachedInstance
{ get; } = new SkippedTestNodeStateProperty();
}
SkippedTestNodeStateProperty tájékoztatja a tesztplatformot, hogy a TestNode ki lett hagyva.
Vegye figyelembe a CachedInstance tulajdonság által kínált praktikus gyorsítótárazott értéket.
public sealed record FailedTestNodeStateProperty : TestNodeStateProperty
{
public FailedTestNodeStateProperty()
: base(default(string))
{
}
public FailedTestNodeStateProperty(string explanation)
: base(explanation)
{
}
public FailedTestNodeStateProperty(
Exception exception,
string? explanation = null)
: base(explanation ?? exception.Message)
{
Exception = exception;
}
public Exception? Exception { get; }
}
Egy állítás után FailedTestNodeStateProperty tájékoztatja a tesztelési platformot, hogy ez a TestNode sikertelen.
public sealed record ErrorTestNodeStateProperty : TestNodeStateProperty
{
public ErrorTestNodeStateProperty()
: base(default(string))
{
}
public ErrorTestNodeStateProperty(string explanation)
: base(explanation)
{
}
public ErrorTestNodeStateProperty(
Exception exception,
string? explanation = null)
: base(explanation ?? exception.Message)
{
Exception = exception;
}
public Exception? Exception { get; }
}
ErrorTestNodeStateProperty tájékoztatja a tesztelési platformot, hogy ez a TestNode sikertelen volt. Ez a hibatípus eltér a FailedTestNodeStateProperty-tól, amelyet állítási hibákhoz használnak. Például jelenthet olyan problémákat a ErrorTestNodeStatePropertysegítségével, mint a tesztinicializálási hibák.
public sealed record TimeoutTestNodeStateProperty : TestNodeStateProperty
{
public TimeoutTestNodeStateProperty()
: base(default(string))
{
}
public TimeoutTestNodeStateProperty(string explanation)
: base(explanation)
{
}
public TimeoutTestNodeStateProperty(
Exception exception,
string? explanation = null)
: base(explanation ?? exception.Message)
{
Exception = exception;
}
public Exception? Exception { get; }
public TimeSpan? Timeout { get; init; }
}
TimeoutTestNodeStateProperty tájékoztatja a tesztelési platformot, hogy ez a TestNode időtúllépési okból meghiúsult. Az időtúllépést a Timeout tulajdonság használatával jelentheti.
public sealed record CancelledTestNodeStateProperty : TestNodeStateProperty
{
public CancelledTestNodeStateProperty()
: base(default(string))
{
}
public CancelledTestNodeStateProperty(string explanation)
: base(explanation)
{
}
public CancelledTestNodeStateProperty(
Exception exception,
string? explanation = null)
: base(explanation ?? exception.Message)
{
Exception = exception;
}
public Exception? Exception { get; }
}
CancelledTestNodeStateProperty tájékoztatja a tesztelési platformot, hogy ez a TestNode törlés miatt meghiúsult.