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.
MTP bağlamında, bir özellikbelirli bir eylemi gerçekleştirme veya belirli bilgiler sağlama olasılığını ifade eder. Test çerçevesinin ve uzantıların belirli bir şekilde çalışma veya istekte bulunanlara belirli bilgiler sağlama becerilerinibildirmesi için bir araçtır.
İstekte bulunanlar platform, uzantı veya test çerçevesi gibi bir test oturumunda yer alan herhangi bir bileşen olabilir.
Yetenek sisteminin birincil amacı, bir test oturumunda yer alan bileşenler arasında etkili iletişimi kolaylaştırarak bilgileri exchange ve ilgili ihtiyaçlarını doğru bir şekilde karşılamalarını sağlamaktır.
Kılavuzlu örnek
Yetenek sisteminin gerekliliğini göstermek için varsayımsal bir örneği ele alalım.
Uyarı
Bu örnek yalnızca gösterim amaçlıdır ve şu anda MTP veya herhangi bir test çerçevesi içinde uygulanmaz.
Test çerçevesinin aynı anda birden fazla test yürütmesini gerektiren bir uzantıya sahip olduğunuzu düşünün. Ayrıca, her test sonrasında uzantının belirli bir test için CPU kullanımını bilmesi gerekir.
Önceki senaryoya uyum sağlamak için aşağıdaki durumlarda test çerçevesinden sorgulamanız gerekir:
- Aynı anda yalnızca bir test yürütme özelliğine sahiptir.
- Her test tarafından tüketilen CPU miktarıyla ilgili bilgi sağlayabilir.
Uzantı, test çerçevesinin bu modda çalışıp çalışmadığını ve bir test oturumu için CPU kullanım bilgileri sağlayıp sağlamadığını nasıl belirleyebilir? MTP'de bu özellik, Microsoft.Testing.Platform.Capabilities.ICapability arabiriminin bir uygulamasıyla temsil edilir:
// Base capabilities contracts
public interface ICapability
{
}
public interface ICapabilities<TCapability>
where TCapability : ICapability
{
IReadOnlyCollection<TCapability> Capabilities { get; }
}
// Specific testing framework capabilities
public interface ITestFrameworkCapabilities : ICapabilities<ITestFrameworkCapability>
{
}
public interface ITestFrameworkCapability : ICapability
{
}
Gördüğünüz gibi, ICapability arabirim herhangi bir özelliği temsil ettiğinden bir işaretçi arabirimidir ve gerçek uygulama bağlama bağımlı olacaktır. Ayrıca, özelliği sınıflandırmak için ITestFrameworkCapability öğesinden devralan ICapability öğesini de gözlemleyeceksiniz. Yetenek sisteminin genel yapısı, bağlama göre kolay gruplandırma sağlar. , ITestFrameworkCapabilitytest çerçevesi tarafından uygulanan tüm özellikleri gruplandırıyor. Arabirim, ICapabilities<TCapability> bir uzantı tarafından uygulanan tüm özelliklerin kümesini gösterir. Benzer şekilde, temel için bağlama özgü bir test çerçevesi olan ITestFrameworkCapabilities vardır. , ITestFrameworkCapabilitiestest çerçevesi kayıt işlemi sırasında platforma sağlanır.
Yukarıda belirtilen senaryoyu ele alan bir özellik oluşturmak için bunu aşağıdaki gibi tanımlarsınız:
public interface IDisableParallelismCapability : ITestFrameworkCapability
{
bool CanDisableParallelism { get; }
bool CanProvidePerTestCpuConsumption { get; }
void Enable();
}
Test çerçevesi bu arabirimi uygularsa çalışma zamanında aşağıdakiler sorgulanabilir:
- Test çerçevesinin paralelliği
CanDisableParallelism = truekapatma özelliğine sahip olup olmadığını doğrulayın. - Test çerçevesinin CPU kullanım verilerini
CanProvidePerTestCPUConsumption = truesağlayabildiğini belirleyin. - Test oturumu başlamadan önce
Enable()yöntemini çağırarak test bağdaştırıcısından bu modu etkinleştirmesini talep edin.
Uzantının içindeki varsayımsal kod parçası şöyle olabilir:
IServiceProvider provider = null; // TODO: Get IServiceProvider.
var capabilities = serviceProvider.GetRequiredService<ITestFrameworkCapabilities>();
// Utilize the `GetCapability` API to search for the specific capability to query.
var capability = capabilities.GetCapability<IDisableParallelismCapability>();
if (capability is null)
{
// Capability not supported...
}
else
{
capability.Enable();
if (capability.CanDisableParallelism)
{
// Do something...
}
if (capability.CanProvidePerTestCpuConsumption)
{
// Do something...
}
}
Yukarıdaki örnekte yetenek altyapısının, bir test oturumunda yer alan bileşenler arasında yetenekleri iletmek için güçlü bir mekanizmaya nasıl olanak sağladığı gösterilmektedir. Örnek, test çerçevesi için özel olarak tasarlanmış bir özelliği gösterse de, herhangi bir bileşen öğesinden ICapabilitydevralan uzantıları kullanıma açabilir ve uygulayabilir.
Tüm ayrıntıların bir arabirim üzerinden iletilmediği açıktır. Önceki örneği göz önünde bulundurarak, CanProvidePerTestCpuConsumption etiketi desteklenirse uzantının ne beklemesi gerekir? Test çerçevesi tarafından IMessageBus aracılığıyla hangi tür özel bilgilerin iletilmesi beklenir? Çözüm, kabiliyetin belgelenmesidir. Belirli bir özelliği gerektiren uzantıyla etkili bir şekilde işbirliği yapmak isteyen uygulayıcılara yardımcı olmak, mümkün olduğunca net bir şekilde tasarlamak, göndermek ve belgelendirmek yetenek sahibinin sorumluluğundadır.
Örneğin TRX rapor uzantısı, test çerçevesinin bir TRX raporunu doğru bir şekilde oluşturmak için gerekli özelliği uygulamasına olanak tanır. Kaydetme uzantısı NuGet paketine https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport dahil edilir, ancak uygulama özelliği yalnızca https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions paketi sözleşmesinde bulunur.
Sonuç olarak, yetenek sisteminin birincil yönlerini özetleyelim:
- Bileşenler arasındaki net ve kararlı iletişimi kolaylaştırmak için gereklidir.
- Tüm yetenekler,
ICapability'den veya ondan devralan bir arabirimden devralmalıdır veICapabilitiesarabirimine sahip bir koleksiyon aracılığıyla kullanıma sunulmalıdır. - Özelliklerin, büyük değişikliklere yol açmadan evrimleşmesine yardımcı olur. Belirli bir özellik desteklenmiyorsa uygun işlem yapılabilir.
- Bir özelliğin tasarlanması, teslimi ve kullanımını belgeleme sorumluluğu, yetenek sahibine aittir. MTP, diğer uzantılarda olduğu gibi bir özelliğe de sahip olabilir.
Çerçeve özellikleri
Platform, test çerçeveleri için kullanıma sunulan tüm özelliklerin temeli olan adlı ITestFrameworkCapability özel bir arabirim sunar. Bu özellikler , test çerçevesi platforma kaydedilirken sağlanır.
IBannerMessageOwnerCapability
Test çerçevesinin platforma başlık iletisi sağlamasına olanak tanıyan isteğe bağlı bir test çerçevesi özelliği. Mesaj null ise veya özellik mevcut değilse, platform standart mesajını kullanır.
Bu özellik uygulaması, başlık iletisinin görüntülenip görüntülenmeyeceğine karar verirken test çerçevesinin dikkate alması gerekebilecek çeşitli koşulları soyutlamanızı sağlar.
Platform, özel başlık iletinizi oluştururken yararlı olabilecek platform hakkında bazı bilgiler sağlamak için hizmeti kullanıma sunarIPlatformInformation.