다음을 통해 공유


Microsoft.Testing.Platform 기능

Microsoft.Testing.Platform의 컨텍스트에서 기능은특정 작업을 수행하거나 특정 정보를 제공할 수 있는 가능성을 나타냅니다. 이는 테스트 프레임워크 및 확장이 특정 방식으로 작동하거나 요청자에게 특정 정보를 제공할 기능을 선언하는 수단입니다.

요청자는 플랫폼, 확장 또는 테스트 프레임워크 자체와 같은 테스트 세션에 관련된 모든 구성 요소일 수 있습니다.

기능 시스템의 주요 목적은 테스트 세션과 관련된 구성 요소 간의 효과적인 통신을 용이하게 하여 정보를 교환하고 각 요구 사항을 정확하게 충족할 수 있도록 하는 것입니다.

안내 예제

기능 시스템의 필요성을 보여 주는 가상의 예제를 살펴보겠습니다.

메모

이 예제는 설명 목적으로만 사용되며 현재 Microsoft.Testing.Platform 또는 테스트 프레임워크 내에서 구현되지 않습니다.

테스트 프레임워크가 한 번에 두 개 이하의 테스트를 실행해야 하는 확장이 있는 경우를 상상해 보십시오. 또한 각 테스트 후에 확장은 해당 특정 테스트의 CPU 사용량을 알고 있어야 합니다.

이전 시나리오를 수용하려면 테스트 프레임워크에서 다음을 문의해야 합니다.

  1. 한 번에 하나의 테스트만 실행할 수 있습니다.
  2. 각 테스트에서 사용하는 CPU 양에 대한 정보를 제공할 수 있습니다.

확장에서 테스트 프레임워크가 이 모드에서 작동하고 테스트 세션에 대한 CPU 사용량 정보를 제공할 수 있는지 어떻게 확인할 수 있나요? Microsoft.Testing.Platform에서 이 기능은 인터페이스 Microsoft.Testing.Platform.Capabilities.ICapability의 구현으로 표현됩니다.

// 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
{
}

여기서 볼 수 있듯이 ICapability 인터페이스는 표식 인터페이스입니다. 이는 모든 기능나타낼 수 있으며, 실제 구현은 컨텍스트에 따라 달라집니다. 당신은 또한 ITestFrameworkCapability에서 상속받아 기능을 분류하는 ICapability를 관찰하게 될 것입니다. 기능 시스템의 일반적인 특성을 사용하면 컨텍스트별로 편리하게 그룹화할 수 있습니다. ITestFrameworkCapability테스트 프레임워크에 의해 구현된 모든 기능을 그룹화합니다. ICapabilities<TCapability> 인터페이스는 확장에서 구현하는 모든 기능의 집합을 표시합니다. 마찬가지로 기본 1의 경우 ITestFrameworkCapabilities라는 컨텍스트별 테스트 프레임워크가 있습니다. ITestFrameworkCapabilities 테스트 프레임워크 등록 프로세스 중에 플랫폼에 제공됩니다.

앞서 언급한 시나리오를 해결하는 기능을 만들려면 다음과 같이 정의합니다.

public interface IDisableParallelismCapability : ITestFrameworkCapability
{
    bool CanDisableParallelism { get; }
    bool CanProvidePerTestCpuConsumption { get; }
    void Enable();
}

테스트 프레임워크에서 이 인터페이스를 구현하는 경우 런타임에 다음을 쿼리할 수 있습니다.

  • 테스트 프레임워크에 병렬 처리 CanDisableParallelism = true해제할 수 있는지 확인합니다.
  • 테스트 프레임워크에서 CPU 사용량 현황 데이터 CanProvidePerTestCPUConsumption = true제공할 수 있는지 확인합니다.
  • 테스트 세션이 시작되기 전에 Enable() 메서드를 호출하여 이 모드를 활성화하도록 테스트 어댑터를 요청합니다.

확장 내의 가상 코드 조각은 다음과 같을 수 있습니다.

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...
    }
}

앞의 예제에서는 기능 인프라를 사용하여 테스트 세션과 관련된 구성 요소 간에 기능을 전달하는 강력한 메커니즘을 사용하는 방법을 보여 줍니다. 샘플은 테스트 프레임워크용으로 특별히 설계된 기능을 보여 주지만 모든 구성 요소는 ICapability상속되는 확장을 노출하고 구현할 수 있습니다.

인터페이스를 통해 모든 세부 정보를 전달할 수 있는 것은 아닙니다. 이전 예제를 고려할 때 CanProvidePerTestCpuConsumption 지원되는 경우 확장은 무엇을 예상해야 하나요? 테스트 프레임워크에서 IMessageBus 통해 어떤 종류의 사용자 지정 정보를 전송해야 하나요? 기능 의 설명서가 솔루션입니다. 소유자가 특정 기능이 필요한 확장으로 효과적으로 공동 작업할 구현자를 지원하기 위해 가능한 한 명확하게 설계, 배송 및 문서화할 기능의 책임입니다.

예를 들어 TRX 보고서 확장을 사용하면 테스트 프레임워크가 TRX 보고서를 정확하게 생성하는 데 필요한 기능을 구현할 수 있습니다. 등록할 확장은 https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport NuGet 패키지에 포함되지만 구현하는 기능은 계약에서만https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions NuGet 패키지에 있습니다.

결론적으로 기능 시스템의 주요 측면을 요약해 보겠습니다.

  • 구성 요소 간의 명확하고 안정적인 통신을 용이하게 하는 데 필수적입니다.
  • 모든 기능은 ICapability 또는 해당 인터페이스에서 상속되거나 ICapabilities 인터페이스를 통한 컬렉션으로 노출되는 인터페이스에서 상속되어야 합니다.
  • 호환성이 손상되는 변경 없이 기능의 진화를 지원합니다. 특정 기능이 지원되지 않는 경우 적절한 조치를 취할 수 있습니다.
  • 기능의 사용을 디자인, 배송 및 문서화하는 책임은 기능 소유자있습니다. Microsoft.Testing.Platform은 다른 확장과 동일한 방식으로 기능을 소유 할 수도 있습니다.

프레임워크 기능

플랫폼은 테스트 프레임워크에 대해 노출되는 모든 기능의 기반이 되는 ITestFrameworkCapability이라는 특수한 인터페이스를 노출합니다. 이러한 기능은 테스트 프레임워크를 플랫폼 등록할 때제공됩니다.

IBannerMessageOwnerCapability

테스트 프레임워크가 플랫폼에 배너 메시지를 제공할 수 있는 선택적 테스트 프레임워크 기능. 메시지가 null 또는 기능이 없는 경우 플랫폼은 기본 배너 메시지를 사용합니다.

이 기능 구현을 사용하면 배너 메시지를 표시할지 여부를 결정할 때 테스트 프레임워크에서 고려해야 할 다양한 조건을 추상화할 수 있습니다.

플랫폼은 사용자 지정 배너 메시지를 작성할 때 유용할 수 있는 플랫폼에 대한 몇 가지 정보를 제공하기 위해 IPlatformInformation 서비스 노출합니다.