Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam konteks Microsoft.Testing.Platform, kemampuan mengacu pada potensi untuk melakukan tindakan tertentu atau memberikan informasi tertentu. Ini adalah sarana bagi kerangka kerja pengujian dan ekstensi untuk menyatakan kemampuan mereka untuk beroperasi dengan cara tertentu atau memberikan informasi khusus kepada pemohon .
Pemohon dapat menjadi komponen apa pun yang terlibat dalam sesi pengujian, seperti platform, ekstensi, atau kerangka kerja pengujian itu sendiri.
Tujuan utama sistem kemampuan adalah untuk memfasilitasi komunikasi yang efektif di antara komponen yang terlibat dalam sesi pengujian, memungkinkan mereka untuk exchange informasi dan memenuhi kebutuhan masing-masing secara akurat.
Contoh terpandu
Mari kita pertimbangkan contoh hipotetis untuk menunjukkan kebutuhan sistem kemampuan.
Nota
Contoh ini murni untuk tujuan ilustrasi dan saat ini tidak diterapkan dalam Microsoft.Testing.Platform atau kerangka kerja pengujian apa pun.
Bayangkan situasi di mana Anda memiliki ekstensi yang memerlukan kerangka kerja pengujian untuk menjalankan tidak lebih dari satu pengujian pada satu waktu. Selain itu, setelah setiap pengujian, ekstensi perlu mengetahui penggunaan CPU untuk pengujian tertentu tersebut.
Untuk mengakomodasi skenario sebelumnya, Anda perlu menanyakan dari kerangka kerja pengujian jika:
- Ini memiliki kemampuan untuk menjalankan hanya satu pengujian pada satu waktu.
- Ini dapat memberikan informasi mengenai jumlah CPU yang dikonsumsi oleh setiap pengujian.
Bagaimana ekstensi dapat menentukan apakah kerangka kerja pengujian memiliki kemampuan untuk beroperasi dalam mode ini dan memberikan informasi penggunaan CPU untuk sesi pengujian? Di Microsoft.Testing.Platform, kemampuan ini diwakili oleh implementasi Microsoft.Testing.Platform.Capabilities.ICapability antarmuka:
// 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
{
}
Seperti yang Anda lihat, antarmuka ICapability adalah penanda antarmuka karena dapat mewakili kemampuan apa pun, dan implementasi aktual akan bergantung pada konteks. Anda juga akan mengamati ITestFrameworkCapability, yang mewarisi dari ICapability untuk mengklasifikasikan kemampuan. Sifat generik sistem kemampuan memungkinkan pengelompokan yang nyaman berdasarkan konteks.
ITestFrameworkCapability mengelompokkan semua kemampuan yang diterapkan oleh kerangka kerja pengujian . Antarmuka ICapabilities<TCapability> memperlihatkan set dari semua kemampuan yang diterapkan oleh ekstensi. Demikian pula, untuk yang dasarnya, ada kerangka kerja pengujian khusus konteks yang disebut ITestFrameworkCapabilities.
ITestFrameworkCapabilities disediakan untuk platform selama proses pendaftaran kerangka kerja pengujian.
Untuk membuat kemampuan yang membahas skenario yang disebutkan di atas, Anda mendefinisikannya sebagai berikut:
public interface IDisableParallelismCapability : ITestFrameworkCapability
{
bool CanDisableParallelism { get; }
bool CanProvidePerTestCpuConsumption { get; }
void Enable();
}
Jika kerangka kerja pengujian mengimplementasikan antarmuka ini, pada saat runtime, hal berikut ini dapat dikueri:
- Verifikasi apakah kerangka kerja pengujian memiliki kemampuan untuk menonaktifkan paralelisme
CanDisableParallelism = true. - Tentukan apakah kerangka kerja pengujian dapat menyediakan data penggunaan CPU
CanProvidePerTestCPUConsumption = true. - Minta adaptor pengujian untuk mengaktifkan mode ini dengan memanggil metode
Enable()sebelum sesi pengujian dimulai.
Fragmen kode hipotetis di dalam ekstensi bisa menjadi sesuatu seperti:
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...
}
}
Contoh sebelumnya menggambarkan bagaimana infrastruktur kemampuan memungkinkan mekanisme yang kuat untuk mengkomunikasikan kemampuan antara komponen yang terlibat dalam sesi pengujian. Meskipun sampel menunjukkan kemampuan yang dirancang khusus untuk kerangka kerja pengujian, komponen apa pun dapat mengekspos dan menerapkan ekstensi yang mewarisi dari ICapability.
Terbukti bahwa tidak semua detail dapat dikomunikasikan melalui antarmuka. Mempertimbangkan contoh sebelumnya, apa yang harus diharapkan ekstensi jika CanProvidePerTestCpuConsumption didukung? Jenis informasi kustom apa yang diharapkan untuk ditransmisikan melalui IMessageBus oleh kerangka kerja pengujian? Solusinya adalah dokumentasi kemampuan. Ini adalah tanggung jawab pemilik kemampuan untuk merancang, meluncurkan, dan mendokumentasikannya dengan sangat jelas guna membantu pelaksana yang ingin secara efektif berkolaborasi dengan ekstensi perangkat lunak yang membutuhkan kemampuan khusus tersebut.
Misalnya, ekstensi laporan TRX memungkinkan kerangka kerja pengujian untuk mengimplementasikan kemampuan yang diperlukan untuk menghasilkan laporan TRX secara akurat. Ekstensi untuk mendaftar disertakan dalam paket NuGet https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport, tetapi kemampuan untuk menerapkan hanya ditemukan dalam kontrak di paket NuGethttps://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions.
Sebagai kesimpulan, mari kita ringkas aspek utama sistem kemampuan:
- Sangat penting untuk memfasilitasi komunikasi yang jelas dan stabil antar komponen.
- Semua kemampuan harus mewarisi dari
ICapabilityatau antarmuka yang mewarisinya, dan diekspos melalui koleksi dengan antarmukaICapabilities. - Ini membantu dalam evolusi fitur tanpa menyebabkan perubahan yang merusak. Jika kemampuan tertentu tidak didukung, tindakan yang sesuai dapat diambil.
- Tanggung jawab merancang, mengirim, dan mendokumentasikan penggunaan kemampuan terletak pada pemilik kemampuan . Microsoft.Testing.Platform juga dapat memiliki kemampuan dengan cara yang sama seperti ekstensi lainnya.
Kemampuan kerangka kerja
Platform ini mengekspos antarmuka khusus bernama ITestFrameworkCapability yang merupakan dasar dari semua kemampuan yang diekspos untuk kerangka kerja pengujian. Kemampuan ini disediakan ketika mendaftarkan kerangka kerja pengujian ke platform.
IBannerMessageOwnerCapability
Kemampuan kerangka kerja pengujian opsional yang memungkinkan kerangka kerja pengujian untuk memberikan pesan banner ke platform. Jika pesan null atau jika kemampuannya tidak ada, platform akan menggunakan pesan banner defaultnya.
Implementasi kemampuan ini memungkinkan Anda untuk mengabstraksi berbagai kondisi yang mungkin perlu dipertimbangkan kerangka kerja pengujian saat memutuskan apakah pesan banner harus ditampilkan atau tidak.
Platform ini mengekspos layanan IPlatformInformation untuk memberikan beberapa informasi tentang platform yang dapat berguna saat membangun pesan banner kustom Anda.