Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No contexto de Microsoft.Testing.Platform, um recurso refere-se ao potencial de executar uma ação específica ou fornecer informações específicas. É um meio para que a estrutura de teste e as extensões declarem sua capacidade para operar de uma determinada maneira ou fornecer informações específicas aos solicitantes .
Os solicitantes podem ser qualquer componente envolvido em uma sessão de teste, como a plataforma, uma extensão ou a própria estrutura de teste.
O principal objetivo do sistema de capacidade é facilitar a comunicação eficaz entre os componentes envolvidos em uma sessão de teste, permitindo-lhes trocar informações e atender às suas respetivas necessidades com precisão.
Exemplo guiado
Vamos considerar um exemplo hipotético para demonstrar a necessidade de um sistema de capacidade.
Observação
Este exemplo é meramente ilustrativo e não está atualmente implementado em Microsoft.Testing.Platform ou em qualquer estrutura de teste.
Imagine uma situação em que você tem uma extensão que exige que a estrutura de teste não execute mais de um teste de cada vez. Além disso, após cada teste, a extensão precisa saber o uso da CPU para esse teste específico.
Para acomodar o cenário anterior, você precisa perguntar na estrutura de teste se:
- Tem a capacidade de executar apenas um teste de cada vez.
- Ele pode fornecer informações sobre a quantidade de CPU consumida por cada teste.
Como a extensão pode determinar se a estrutura de teste tem a capacidade de operar nesse modo e fornecer informações de uso da CPU para uma sessão de teste? Em Microsoft.Testing.Platform, esse recurso é representado por uma implementação da Microsoft.Testing.Platform.Capabilities.ICapability interface:
// 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
{
}
Como pode ver, ICapability é uma interface de marcador pois pode representar qualquer capacidade, e a implementação real será dependente do contexto. Você também observará o ITestFrameworkCapability, que herda de ICapability para classificar a capacidade. A natureza genérica do sistema de capacidades permite um agrupamento conveniente por contexto. O ITestFrameworkCapability agrupa todas as capacidades implementadas pelo framework de teste . A interface ICapabilities<TCapability> revela o conjunto de todos os recursos implementados por uma extensão. Da mesma forma, para a base, há uma estrutura de teste específica do contexto chamada ITestFrameworkCapabilities. O ITestFrameworkCapabilities é fornecido à plataforma durante o processo de registo da estrutura de teste .
Para criar um recurso que aborda o cenário acima mencionado, defina-o da seguinte maneira:
public interface IDisableParallelismCapability : ITestFrameworkCapability
{
bool CanDisableParallelism { get; }
bool CanProvidePerTestCpuConsumption { get; }
void Enable();
}
Se a estrutura de teste implementar essa interface, em tempo de execução, o seguinte pode ser consultado:
- Verifique se a estrutura de teste tem a capacidade de desativar o paralelismo
CanDisableParallelism = true. - Determine se a estrutura de teste pode fornecer dados de uso da CPU
CanProvidePerTestCPUConsumption = true. - Solicite que o adaptador de teste ative esse modo invocando o método
Enable()antes do início da sessão de teste.
O fragmento de código hipotético dentro da extensão poderia ser algo como:
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...
}
}
O exemplo anterior ilustra como a infraestrutura de capacidade permite um mecanismo poderoso para comunicar habilidades entre os componentes envolvidos em uma sessão de teste. Embora o exemplo demonstre um recurso projetado especificamente para a estrutura de teste, qualquer componente pode expor e implementar extensões que herdam de ICapability.
É evidente que nem todos os detalhes podem ser comunicados através de uma interface. Considerando o exemplo anterior, o que a extensão deve esperar se o CanProvidePerTestCpuConsumption for suportado? Que tipo de informação personalizada se espera que seja transmitida via o IMessageBus pela estrutura de teste? A solução é a documentação da capacidade. É responsabilidade do proprietário da capacidade projetar, enviar e documentar de uma forma o mais clara possível para ajudar os implementadores que desejam efetivamente colaborar com a extensão que requer essa capacidade específica.
Por exemplo, a extensão de relatório TRX permite que a estrutura de teste implemente a capacidade necessária para gerar com precisão um relatório TRX. A extensão para registo está incluída no pacote NuGet https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport, mas a capacidade de implementação é encontrada apenas no contrato do pacote NuGethttps://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions.
Em conclusão, vamos resumir os principais aspetos do sistema de capacidade:
- É essencial para facilitar uma comunicação clara e estável entre componentes.
- Todos os recursos devem herdar de
ICapabilityou de uma interface que herda dele e são expostos por meio de uma coleção com a interfaceICapabilities. - Ajuda na evolução das funcionalidades sem causar alterações de quebra. Se uma certa capacidade não for suportada, podem ser tomadas as medidas apropriadas.
- A responsabilidade de projetar, enviar e documentar o uso de um recurso é do proprietário da capacidade . Microsoft.Testing.Platform também pode possuir um recurso da mesma forma que qualquer outra extensão.
Capacidades da estrutura
A plataforma expõe uma interface especializada chamada ITestFrameworkCapability que é a base de todos os recursos expostos para estruturas de teste. Esses recursos são fornecidos ao registrar o framework de teste na plataforma.
IBannerMessageOwnerCapability
Uma capacidade opcional da estrutura de teste que permite à estrutura de teste prover a mensagem de banner para a plataforma. Se a mensagem estiver null ou se o recurso não estiver presente, a plataforma usará sua mensagem de banner padrão.
Essa implementação de recursos permite que você abstraia as várias condições que a estrutura de teste pode precisar considerar ao decidir se a mensagem de banner deve ou não ser exibida.
A plataforma expõe o serviço IPlatformInformation para fornecer algumas informações sobre a plataforma que podem ser úteis ao criar a sua mensagem de banner personalizada.