언어

DoNotParallelizeAttribute 클래스

정의

어셈블리 내 병렬 처리에서 테스트, 테스트 클래스 또는 테스트 어셈블리를 제외합니다. 영향을 받는 테스트는 동일한 테스트 원본의 다른 테스트와 동시에 실행되지 않으며 병렬 처리를 사용하도록 설정하면 해당 원본에서 병렬 처리 가능한 모든 테스트가 완료된 후 순차적으로 실행되도록 지연됩니다.

public ref class DoNotParallelizeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=false)]
public class DoNotParallelizeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method)]
public class DoNotParallelizeAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=false)>]
type DoNotParallelizeAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method)>]
type DoNotParallelizeAttribute = class
    inherit Attribute
Public Class DoNotParallelizeAttribute
Inherits Attribute
상속
DoNotParallelizeAttribute
특성

설명

이 특성은 한 번에 두 가지 보증을 제공하며 두 번째 보증은 간과하기 쉽습니다.

상호 배제. 이 특성을 직접 또는 클래스 또는 어셈블리를 통해 수행하는 테스트는 동일한 원본의 다른 테스트와 동시에 실행되지 않습니다. 그것은 자체적으로 실행됩니다.

지연. 어셈블리 내 병렬 처리를 사용하도록 설정하면 스케줄러는 원본 테스트를 병렬 처리 가능한 집합과 병렬 처리할 수 없는 집합으로 분할합니다. 먼저 전체 병렬 처리 가능 집합을 완료로 실행하고, 해당 원본 실행이 끝날 때 병렬 처리할 수 없는 집합(한 번에 하나의 테스트)만 실행합니다. 분할은 테스트 원본(어셈블리)당이므로 "마지막 실행" 및 "실행만"은 동일한 원본의 다른 테스트에 비해 보장됩니다. 여러 원본에 걸쳐 있는 실행에는 각각에 대해 별도의 지연된 꼬리가 있습니다.

이렇게 하면 특성의 비용을 쉽게 과소평가할 수 있습니다. 지연된 테스트는 동일한 원본의 다른 테스트와 겹칠 수 없으므로 해당 기간이 함께 발생하는 병렬 작업에 흡수되지 않고 해당 원본의 중요한 경로에 추가 됩니다. 따라서 이 특성을 전달하는 단일 느린 테스트는 원본 내에서 불균형적으로 비용이 많이 듭니다. 원본의 실행 기간은 원본의 다른 테스트와 병렬로 실행되지 않는 것 외에도 대략 자체 기간으로 길어집니다. (별도의 호스트에서 실행할 수 있는 다른 원본의 테스트와 계속 겹칠 수 있으므로 이 비용은 전체 실행이 아니라 원본의 중요한 경로에 해당합니다.)

지연된 테스트는 병렬 처리 가능한 집합이 완료된 후에만 실행되므로 병렬 처리 가능한 단계에서 취소되거나 중단된 실행은 "마지막 실행" 및 "실행이 일찍 취소될 때 전혀 실행되지 않을 수 있음"을 실행하지 않고 완료할 수 있습니다.

병렬 처리가 해제된 경우에는 아무런 효과가 없습니다. MSTest는 기본적으로 병렬 처리되지 않습니다. 어셈블리 내 병렬 처리는 ([assembly: Parallelize]), 동등한 실행 설정 또는 MSTestParallelizeScopeMSTestParallelizeWorkers / MSBuild 속성을 통해 ParallelizeAttribute 옵트인됩니다. 병렬 처리를 사용하도록 설정하지 않은 경우 모든 테스트가 이미 순차적으로 실행되므로 이 특성이 불활성이므로 옵트아웃할 항목이 없습니다.

이 특성은 다음 세 가지 수준에서 적용할 수 있습니다.

  • 어셈블리 - 어셈블리의 모든 테스트는 해당 어셈블리에 대한 병렬 처리를 사용하지 않도록 설정하는 것과 동일한 병렬 처리에서 제외됩니다.
  • 클래스 - 클래스 의 모든 테스트는 제외됩니다. 클래스의 테스트는 지연된 단계에서 순차적으로 실행됩니다.
  • 메서드 - 주석이 추가된 테스트만 제외되고 지연됩니다. 나머지 클래스는 병렬로 실행할 수 있습니다.

이것은 거친 컨트롤입니다. 병렬 처리에서 테스트를 완전히 옵트아웃합니다. 특정 공유 리소스만 경합하는 경우 병렬 처리에서 제외하는 대신 동일한 리소스를 선언하는 테스트만 직렬화하는 것이 좋습니다 ResourceLockAttribute. 테스트가 두 특성을 DoNotParallelizeAttribute 모두 수행하는 경우 우선 순위를 지정하고 선언된 리소스 잠금은 영향을 주지 않습니다. 이러한 테스트는 순차적 단계에서 실행되며 잠금을 획득하는 병렬 스케줄러를 통과하지 않습니다.

생성자

Name Description
DoNotParallelizeAttribute()

어셈블리 내 병렬 처리에서 테스트, 테스트 클래스 또는 테스트 어셈블리를 제외합니다. 영향을 받는 테스트는 동일한 테스트 원본의 다른 테스트와 동시에 실행되지 않으며 병렬 처리를 사용하도록 설정하면 해당 원본에서 병렬 처리 가능한 모든 테스트가 완료된 후 순차적으로 실행되도록 지연됩니다.

적용 대상