Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Microsoft.Testing.Platform için özel bir test çerçevesinin nasıl oluşturulacağı açıklanmaktadır. Test çerçevesi tek zorunlu uzantıdır. Testleri bulur ve çalıştırır ve sonuçları platforma geri bildirir.
Tam uzantı noktası özeti ve işlem içi/işlem dışı kavramlar için bkz. Özel uzantılar oluşturma.
VSTest tabanlı mevcut bir test çerçevesini geçiriyorsanız, önerilen yaklaşım ITestFramework arabirimini doğal olarak uygulamaktır.
VSTest Köprüsü uzantısı bir geçiş adımı olarak kullanılabilir, ancak yerel bir uygulama en iyi deneyimi sağlar.
Test çerçevesi uzantısı
Test çerçevesi, test platformuna testleri bulma ve yürütme olanağı sağlayan birincil uzantıdır. Test çerçevesi, test sonuçlarını test platformuna geri iletmekle sorumludur. Test çerçevesi, test oturumu yürütmek için gereken tek zorunlu uzantıdır.
Test çerçevesi kaydetme
Bu bölümde test çerçevesinin test platformuna nasıl kaydedilecekleri açıklanmaktadır.
TestApplication.RegisterTestFramework belgelerinde gösterildiği gibi API'yi kullanarak test uygulaması oluşturucusu başına yalnızca bir test çerçevesi kaydedersiniz.
Kayıt API'si aşağıdaki gibi tanımlanır:
ITestApplicationBuilder RegisterTestFramework(
Func<IServiceProvider, ITestFrameworkCapabilities> capabilitiesFactory,
Func<ITestFrameworkCapabilities, IServiceProvider, ITestFramework> adapterFactory);
RegisterTestFramework API iki fabrika bekler:
Func<IServiceProvider, ITestFrameworkCapabilities>: Bu,IServiceProviderarabirimini uygulayan bir nesneyi kabul eden veITestFrameworkCapabilitiesarabirimini uygulayan bir nesne döndüren bir temsilcidir.IServiceProvideryapılandırmalar, günlükçüler ve komut satırı bağımsız değişkenleri gibi platform hizmetlerine erişim sağlar.Arabirim
ITestFrameworkCapabilities, test çerçevesi tarafından desteklenen özellikleri platforma ve uzantılara duyurmak için kullanılır. Platformun ve uzantıların belirli davranışları uygulayarak ve destekleyerek doğru etkileşim kurmasını sağlar. Yetenek kavramını daha iyi anlamak için ilgili bölüme bakın.Func<ITestFrameworkCapabilities, IServiceProvider, ITestFramework>: Bu, ITestFrameworkCapabilities nesnesi ve platform hizmetlerine bir kez daha erişim sağlamak için birFunc<IServiceProvider, ITestFrameworkCapabilities>alan, tarafından döndürülen örnek olan bir temsilcidir. Beklenen dönüş nesnesi, ITestFramework arabirimini uygulayan nesnedir. ,ITestFrameworktestleri bulup çalıştıran ve ardından sonuçları test platformuna geri ileden yürütme altyapısı görevi görür.
Platformun, ITestFrameworkCapabilities ve ITestFramework'ün oluşturulmasını ayırma gereksinimi, desteklenen özellikler geçerli test oturumunu yürütmek için yeterli değilse, test çerçevesinin oluşturulmasını önlemek amacıyla yapılan bir iyileştirmedir.
Boş bir yetenek kümesi döndüren bir test çerçevesi kaydını gösteren aşağıdaki kullanıcı kodu örneğini göz önünde bulundurun:
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));
}
}
// ...
Şimdi, kayıt koduyla bu örneğin ilgili giriş noktasını göz önünde bulundurun:
var testApplicationBuilder = await TestApplication.CreateBuilderAsync(args);
// Register the testing framework
testApplicationBuilder.AddTestingFramework();
using var testApplication = await testApplicationBuilder.BuildAsync();
return await testApplication.RunAsync();
Uyarı
Boş ITestFrameworkCapabilities döndürülmesi test oturumunun yürütülmesini engellememelidir. Tüm test çerçeveleri testleri bulabilir ve çalıştırabilmelidir. Etki, test çerçevesinde belirli bir özellik yoksa devre dışı bırakmayı seçebilecek uzantılarla sınırlı olmalıdır.
Test çerçevesi oluşturma
Microsoft.Testing.Platform.Extensions.TestFramework.ITestFramework, bir test çerçevesi sağlayan uzantılar tarafından uygulanır:
public interface ITestFramework : IExtension
{
Task<CreateTestSessionResult> CreateTestSessionAsync(CreateTestSessionContext context);
Task ExecuteRequestAsync(ExecuteRequestContext context);
Task<CloseTestSessionResult> CloseTestSessionAsync(CloseTestSessionContext context);
}
IExtension arabirimi
ITestFramework arabirimi, tüm uzantı noktalarının devraldığı IExtension arabiriminden devralır.
IExtension uzantının adını ve açıklamasını almak için kullanılır. ayrıca IExtension aracılığıyla, kurulumda Task<bool> IsEnabledAsync()uzantıyı dinamik olarak etkinleştirmenin veya devre dışı bırakmanın bir yolunu sağlar. Devre dışı bırakmak için belirli gereksinimleriniz yoksa lütfen bu yöntemden geri döndüğünüzden true emin olun.
CreateTestSessionAsync yöntemi
CreateTestSessionAsync yöntemi test oturumunun başlangıcında çağrılır ve test çerçevesini başlatmak için kullanılır. API bir CreateTestSessionContext nesneyi kabul eder ve döndürür CreateTestSessionResult.
public sealed class CreateTestSessionContext : TestSessionContext
{
public CancellationToken CancellationToken { get; }
}
SessionUid özelliği öğesinden TestSessionContext devralınır (bkz. TestSessionContext bölümü).
CancellationToken, CreateTestSessionAsync yürütmesini durdurmak için kullanılır.
Dönüş nesnesi bir CreateTestSessionResult:
public sealed class CreateTestSessionResult
{
public string? WarningMessage { get; set; }
public string? ErrorMessage { get; set; }
public bool IsSuccess { get; set; }
}
IsSuccess özelliği, oturum oluşturma işleminin başarılı olup olmadığını belirtmek için kullanılır. Ne zaman geri dönerse false, test yürütmesi durdurulur.
CloseTestSessionAsync yöntemi
CloseTestSessionAsync yöntemi, işlevselliği açısından CreateTestSessionAsync ile yan yana getirilmiştir, tek fark ise nesne adlarıdır. Daha fazla bilgi için bölümüne bakın CreateTestSessionAsync .
ExecuteRequestAsync yöntemi
ExecuteRequestAsync yöntemi türünde ExecuteRequestContextbir nesnesi kabul eder. Adıyla önerilen bu nesne, test çerçevesinin gerçekleştirmesi beklenen eylemle ilgili ayrıntıları tutar.
Tanım ExecuteRequestContext şöyledir:
public sealed class ExecuteRequestContext
{
public IRequest Request { get; }
public IMessageBus MessageBus { get; }
public CancellationToken CancellationToken { get; }
public void Complete();
}
IRequest: Bu, her tür isteğin temel arabirimidir. Test çerçevesini, yaşam döngüsüne sahip belirli bir işlem içinde durum bilgisi tutan bir sunucu olarak düşünmelisiniz.
Yukarıdaki diyagramda test çerçevesi örneği oluşturulduktan sonra test platformunun üç istek yürüttüğü gösterilmektedir. Test çerçevesi bu istekleri işler ve isteğin IMessageBus kendisine dahil edilen hizmeti kullanarak belirli isteklerin sonucunu sunar. Belirli bir istek işlendikten sonra test çerçevesi, test platformuna isteğin yerine getirildiğini belirten Complete() yöntemini çağırır.
Test platformu, gönderilen tüm istekleri izler. Tüm istekler yerine getirildikten sonra CloseTestSessionAsync çağrılır ve örnek gerektiğinde (eğer IDisposable/IAsyncDisposable uygulanmışsa) yok edilir.
İsteklerin ve tamamlanmalarının birbirlerine çakışabileceği ve isteklerin eş zamanlı ve eş zamanlı olmayan bir şekilde yürütülmesine olanak tanıyabileceği açıktır.
Uyarı
Şu anda test platformu çakışan istekler göndermez ve bir sonrakini göndermeden önce isteğin >> tamamlanmasını bekler. Ancak bu davranış gelecekte değişebilir. Eşzamanlı istekler için destek, yetenek sistemi aracılığıyla belirlenir.
Uygulama IRequest , yerine getirilmesi gereken tam isteği belirtir. Test çerçevesi isteğin türünü tanımlar ve uygun şekilde işler. İstek türü tanınmazsa, bir istisna oluşturulmalıdır.
Kullanılabilir istekler hakkındaki ayrıntıları IRequest bölümünde bulabilirsiniz.
IMessageBus: İstekle bağlantılı olan bu hizmet, test çerçevesinin devam eden istekle ilgili bilgileri test platformunda zaman uyumsuz olarak yayımlamasına olanak tanır.
Mesaj veri yolu, platform için merkez görevi görür ve tüm platform bileşenleri ve uzantıları arasında asenkron iletişimi kolaylaştırır.
Test platformunda yayımlanacak bilgilerin kapsamlı bir listesi için IMessageBus bölümüne bakın.
CancellationToken: Bu belirteç, belirli bir isteğin işlenmesini kesintiye uğratmak için kullanılır.
Complete(): Önceki dizide gösterildiği gibi, Complete yöntem isteğin başarıyla işlendiğini ve tüm ilgili bilgilerin IMessageBus'a iletildiğini platforma bildirir.
Uyarı
İstekte Complete()'yi çağırmayı ihmal etmek, test uygulamasının yanıt vermez hale gelmesine neden olur.
Test çerçevenizi gereksinimlerinize veya kullanıcılarınızın ihtiyaçlarına göre özelleştirmek için yapılandırma dosyasının içinde veya özel komut satırı seçenekleriyle kişiselleştirilmiş bir bölüm kullanabilirsiniz.
İstekleri işleme
Sonraki bölümde, bir test çerçevesinin alabileceği ve işleyebileceği çeşitli isteklerin ayrıntılı bir açıklaması sağlanır.
Sonraki bölüme geçmeden önce, test yürütme bilgilerini test platformuna iletmek için temel hizmet olan IMessageBus kavramını iyice kavramak çok önemlidir.
TestSessionContext
TestSessionContext, devam eden test oturumu hakkında bilgi sağlayan tüm istekler arasında paylaşılan bir özelliktir:
public class TestSessionContext
{
public SessionUid SessionUid { get; }
}
public readonly struct SessionUid(string value)
{
public string Value { get; }
}
TestSessionContext, devam eden test oturumu için benzersiz bir tanımlayıcıdan oluşur ve bu, test oturumu verilerini günlüğe kaydetmeye ve ilişkilendirmeye yardımcı olur.
KeşfetTestYürütmeİsteği
public class DiscoverTestExecutionRequest
{
public TestSessionContext Session { get; }
public ITestExecutionFilter Filter { get; }
}
, DiscoverTestExecutionRequest test çerçevesine testleri keşfetmesini ve bu bilgileri IMessageBus'a iletmesini sağlar.
Önceki bölümde açıklandığı gibi, bulunan bir testin özelliği şeklindedir DiscoveredTestNodeStateProperty. Referans olarak bir genel kod parçacığı:
var testNode = new TestNode
{
Uid = GenerateUniqueStableId(),
DisplayName = GetDisplayName(),
Properties = new PropertyBag(
DiscoveredTestNodeStateProperty.CachedInstance),
};
await context.MessageBus.PublishAsync(
this,
new TestNodeUpdateMessage(
discoverTestExecutionRequest.Session.SessionUid,
testNode));
// ...
RunTestExecutionRequest
public class RunTestExecutionRequest
{
public TestSessionContext Session { get; }
public ITestExecutionFilter Filter { get; }
}
, RunTestExecutionRequest test çerçevesine testleri yürütmesini ve bu bilgileri IMessageBus'a iletmesini sağlar.
Referans olarak bir genel kod parçacığı:
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));
Veri TestNodeUpdateMessage
IMessageBus bölümünde belirtildiği gibi, ileti veri yolunu kullanmadan önce sağlamayı planladığınız veri türünü belirtmeniz gerekir. Test platformu, TestNodeUpdateMessagebir test güncelleştirme bilgileri kavramını temsil etmek için iyi bilinen bir türü tanımlamıştır.
Belgenin bu bölümünde bu yük verilerinin nasıl kullanıldığı açıklanır. Şimdi yüzeyi inceleyelim:
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: ikiTestNodeUpdateMessageözelliğinden oluşur: aTestNodeve .ParentTestNodeUid,ParentTestNodeUidbir testin üst testi olabileceğini gösterir ve birbiriyle ilişkili olarak düzenlenebilen bir test ağacıTestNodekavramını tanıtır. Bu yapı, düğümler arasındaki ağaç ilişkisine göre gelecekteki iyileştirmelere ve özelliklere olanak tanır. Test çerçeveniz bir test ağacı yapısı gerektirmiyorsa, bunu kullanmamayı tercih edebilir ve null olarak ayarlayarak basit bir düz listeTestNodeelde edebilirsiniz.TestNode:TestNodeüç özelliğe sahiptir, bunlardan biriUidtüründe olanTestNodeUid'dir. Bu, düğüm için benzersiz kararlı kimlik görevi görür. BENZERSİZ KARARLI ID terimi, aynı TestNode'in farklı çalıştırmalarda ve işletim sistemlerinde ÖZDEŞUidolarak kalması gerektiğini ifade eder.TestNodeUid, test platformu tarafından olduğu gibi kabul edilen rastgele bir opak dizedir.
Önemli
Kimliğin kararlılığı ve benzersizliği test etki alanında çok önemlidir. Bu, bir testi yürütmek için tam olarak hedef almayı sağlar ve kimliğin bir test için kalıcı bir tanımlayıcı olarak işlev görmesine olanak tanıyarak güçlü uzantıları ve özellikleri kolaylaştırır.
İkinci özellik DisplayName, testin insan dostu adıdır. Örneğin, --list-tests komutunu komut satırında çalıştırdığınızda bu ad görüntülenir.
Üçüncü öznitelik Properties, bir PropertyBag türüdür. Koddaki gibi, TestNodeUpdateMessage hakkında genel anlamda özellikleri barındıran özel bir özellik paketidir. Bu, yer tutucu arabirimini IPropertyuygulayan düğüme herhangi bir özelliği ekleyebileceğiniz anlamına gelir.
Test platformu, bir testin geçirildiğini, başarısız olduğunu veya atlanıp atlanmadığını belirlemek için öğesine eklenen TestNode.Properties belirli özellikleri tanımlar.
Kullanılabilir özelliklerin geçerli listesini göreli açıklamayla birlikte TestNodeUpdateMessage.TestNode bölümünde bulabilirsiniz.
Türü PropertyBag, genellikle her IData'de erişilebilir olup, platform ve uzantılarca sorgulanabilecek çeşitli nitelikleri depolamak için kullanılır. Bu mekanizma, önemli değişiklikler yapmadan platformu yeni bilgilerle geliştirmemize olanak tanır. Bir bileşen özelliği tanırsa sorgulayabilir; aksi takdirde, onu göz ardı eder.
Son olarak bu bölüm, test çerçevesi uygulamanızın, aşağıdaki örnekte olduğu gibi IDataProducerler üreten TestNodeUpdateMessage uygulamasını gerçekleştirmesi gerektiğini açıkça ifade eder.
internal sealed class TestingFramework
: ITestFramework, IDataProducer
{
// ...
public Type[] DataTypesProduced =>
[
typeof(TestNodeUpdateMessage)
];
// ...
}
Test bağdaştırıcınız yürütme sırasında dosyaların yayımlanmasını gerektiriyorsa, tanınan özellikleri şu kaynak dosyada bulabilirsiniz: https://github.com/microsoft/testfx/blob/main/src/Platform/Microsoft.Testing.Platform/Messages/FileArtifacts.cs. Gördüğünüz gibi, dosya varlıklarını genel olarak sağlayabilir veya bunları belirli bir TestNode ile ilişkilendirebilirsiniz. Eğer bir SessionFileArtifact push etmek istiyorsanız, önceden platforma bildirmeniz gerektiğini unutmayın; aşağıda gösterildiği gibi.
internal sealed class TestingFramework
: ITestFramework, IDataProducer
{
// ...
public Type[] DataTypesProduced =>
[
typeof(TestNodeUpdateMessage),
typeof(SessionFileArtifact)
];
// ...
}
İyi bilinen özellikler
İstekler bölümünde ayrıntılı olarak açıklandığı gibi, test platformu, TestNodeUpdateMessage öğesine eklenen belirli özellikleri tanıyarak bir TestNode öğesinin durumunu belirler (örneğin, başarılı, başarısız, atlanmış vb.). Bu, çalışma zamanının konsolda ilgili bilgileriyle başarısız testlerin listesini doğru bir şekilde görüntülemesine ve test işlemi için uygun çıkış kodunu ayarlamasına olanak tanır.
Bu segmentte, çeşitli iyi bilinen IProperty seçenekleri ve bunların ilgili etkilerini göstereceğiz.
İyi bilinen özelliklerin kapsamlı bir listesi için bkz. TestNodeProperties.cs. Özellik açıklamasının eksik olduğunu fark ederseniz, lütfen bir sorun bildirin.
Bu özellikler aşağıdaki kategorilere ayrılabilir:
- Genel bilgiler: Her tür isteğe dahil edilebilen özellikler.
-
Bulma bilgileri: Bulma
DiscoverTestExecutionRequestisteği sırasında sağlanan özellikler. -
Yürütme bilgileri: Bir test yürütme isteği
RunTestExecutionRequestsırasında sağlanan özellikler.
Bazı özellikler gerekliyken, diğerleri isteğe bağlıdır. Başarısız testleri raporlama ve tüm test oturumunun başarılı olup olmadığını gösterme gibi temel test işlevlerini sağlamak için zorunlu özellikler gereklidir.
İsteğe bağlı özellikler ise ek bilgi sağlayarak test deneyimini geliştirir. Bunlar özellikle IDE senaryolarında (VS, VSCode vb.), konsol çalıştırmalarında veya düzgün çalışması için daha ayrıntılı bilgi gerektiren belirli uzantıları desteklerken kullanışlıdır. Ancak, bu isteğe bağlı özellikler testlerin yürütülmesini etkilemez.
Uyarı
Uzantılar, doğru şekilde çalışması için belirli bilgilere ihtiyaç duyduklarında özel durumları uyarmak ve yönetmekle görevlendirilir. Uzantı, gerekli bilgilere sahip değilse, test yürütmenin başarısız olmasına neden olmamalıdır, bunun yerine yalnızca devre dışı kalmalıdır.
Genel bilgiler
public record KeyValuePairStringProperty(
string Key,
string Value)
: IProperty;
KeyValuePairStringProperty genel bir anahtar/değer çifti verisini temsil eder.
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 , testin kaynak dosya içindeki konumunu saptamak için kullanılır. Bu, başlatıcı Visual Studio veya Visual Studio Code gibi bir IDE olduğunda özellikle yararlıdır.
public sealed record TestMethodIdentifierProperty(
string AssemblyFullName,
string Namespace,
string TypeName,
string MethodName,
string[] ParameterTypeFullNames,
string ReturnTypeFullName)
TestMethodIdentifierProperty bir test yöntemi için benzersiz bir tanımlayıcıdır.
public sealed record TestMetadataProperty(
string Key,
string Value)
TestMetadataProperty, bir öğesinin özelliklerini veya TestNode iletmek için kullanılır.
Bulma bilgileri
public sealed record DiscoveredTestNodeStateProperty(
string? Explanation = null)
{
public static DiscoveredTestNodeStateProperty CachedInstance { get; }
}
, DiscoveredTestNodeStateProperty bu TestNode'un bulunduğunu gösterir.
DiscoverTestExecutionRequest bir test çerçevesine gönderildiğinde kullanılır.
Özelliğin CachedInstance sunduğu kullanışlı önbelleğe alınmış değeri not alın.
Bu özellik gereklidir.
Yürütme bilgileri
public sealed record InProgressTestNodeStateProperty(
string? Explanation = null)
{
public static InProgressTestNodeStateProperty CachedInstance { get; }
}
InProgressTestNodeStateProperty, TestNode'in yürütülecek şekilde zamanlandığını ve şu anda devam etmekte olduğunu test platformuna bildirir.
Özelliğin CachedInstance sunduğu kullanışlı önbelleğe alınmış değeri not alın.
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; }
}
TimingProperty, yürütmeyle ilgili TestNode zamanlama ayrıntılarını aktarmak için kullanılır. Ayrıca aracılığıyla StepTimingInfotek tek yürütme adımlarının zamanlamasına da olanak tanır. Bu özellikle test kavramınız başlatma, yürütme ve temizleme gibi birden çok aşamaya bölündüğünde kullanışlıdır.
Aşağıdaki özelliklerden biri ve yalnızca biri gereklidirTestNode ve sonucunu TestNode test platformuna iletir.
public sealed record PassedTestNodeStateProperty(
string? Explanation = null)
: TestNodeStateProperty(Explanation)
{
public static PassedTestNodeStateProperty CachedInstance
{ get; } = new PassedTestNodeStateProperty();
}
PassedTestNodeStateProperty bunun geçirildiğini test platformuna TestNode bildirir.
Özelliğin CachedInstance sunduğu kullanışlı önbelleğe alınmış değeri not alın.
public sealed record SkippedTestNodeStateProperty(
string? Explanation = null)
: TestNodeStateProperty(Explanation)
{
public static SkippedTestNodeStateProperty CachedInstance
{ get; } = new SkippedTestNodeStateProperty();
}
SkippedTestNodeStateProperty bunun atlandığını TestNode test platformuna bildirir.
Özelliğin CachedInstance sunduğu kullanışlı önbelleğe alınmış değeri not alın.
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; }
}
FailedTestNodeStateProperty bir onaydan sonra bunun TestNode başarısız olduğunu test platformuna bildirir.
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 bunun başarısız olduğunu test platformuna TestNode bildirir. Bu tür bir hata, onay hataları için kullanılan türünden FailedTestNodeStatePropertyfarklıdır. Örneğin, ile ErrorTestNodeStatePropertytest başlatma hataları gibi sorunları bildirebilirsiniz.
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 bunun zaman aşımı nedenleriyle başarısız olduğunu test platformuna TestNode bildirir. Özelliği Timeout kullanarak zaman aşımını bildirebilirsiniz.
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 bunun iptal nedeniyle başarısız olduğunu TestNode test platformuna bildirir.