Lenguaje

DoNotParallelizeAttribute Clase

Definición

Excluye una prueba, una clase de prueba o un ensamblado de prueba de paralelización en ensamblado. Las pruebas afectadas nunca se ejecutan simultáneamente con ninguna otra prueba en el mismo origen de prueba y, cuando se habilita la paralelización, se aplazan para ejecutarse secuencialmente después de que haya finalizado cada prueba paralelizable en ese origen.

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
Herencia
DoNotParallelizeAttribute
Atributos

Comentarios

El atributo proporciona dos garantías a la vez y la segunda es fácil de pasar por alto:

Exclusión mutua. Una prueba que lleva este atributo , directamente, o a través de su clase o su ensamblado, nunca se ejecuta al mismo tiempo que cualquier otra prueba en el mismo origen. Se ejecuta por sí mismo.

Aplazamiento. Cuando se habilita la paralelización en ensamblado, el programador crea particiones de las pruebas de un origen en un conjunto paralelizable y un conjunto no paralelizable. Ejecuta todo el conjunto paralelizable que se completa en primer lugar y, a continuación, ejecuta el conjunto no paralelizable (una prueba a la vez) al final de la ejecución de ese origen. Dado que la creación de particiones es por origen de prueba (ensamblado), "se ejecuta por última vez" y "solo se ejecuta" son garantías relativas a las demás pruebas de ese mismo origen; una ejecución que abarca varios orígenes tiene una cola diferida independiente para cada una.

Esto facilita la subestimación del costo del atributo. Una prueba diferida no se puede superponer con ninguna otra prueba en el mismo origen, por lo que su duración se agrega a la ruta crítica de ese origen en lugar de absorberse por trabajo paralelo junto a ella. Por lo tanto, una sola prueba lenta que lleva este atributo es desproporcionadamente costosa dentro de su origen: alarece la ejecución de ese origen aproximadamente durante su propia duración, encima de nunca se ejecuta en paralelo con cualquier otra prueba del origen. (Todavía puede superponerse con pruebas de otros orígenes, que se pueden ejecutar en hosts independientes, por lo que este costo es a la ruta crítica del origen en lugar de necesariamente a toda la ejecución).

Dado que las pruebas diferidas se ejecutan solo después de que finalice el conjunto paralelizable, una ejecución que se cancele o anule durante la fase paralelizable puede completarse sin ejecutar ninguno de ellos: "se ejecuta por última vez" y "puede no ejecutarse en absoluto cuando la ejecución se cancela antes" son true.

No hay ningún efecto cuando la paralelización está desactivada. MSTest no se paraleliza de forma predeterminada; La paralelización en ensamblado se realiza mediante ParallelizeAttribute ([assembly: Parallelize]), la configuración de ejecución equivalente o las propiedades de MSTestParallelizeScope / MSTestParallelizeWorkers MSBuild. Cuando la paralelización no está habilitada, todas las pruebas ya se ejecutan secuencialmente, por lo que este atributo es inerte, no hay nada que rechazar.

El atributo se puede aplicar en tres niveles:

  • Ensamblado : todas las pruebas del ensamblado se excluyen de la paralelización, lo que equivale a deshabilitar la paralelización de ese ensamblado.
  • Clase : todas las pruebas de la clase se excluyen; Las pruebas de la clase se ejecutan secuencialmente en la fase diferida.
  • Método — solo se excluye y aplaza la prueba anotada; el resto de su clase todavía se puede ejecutar en paralelo.

Se trata de un control general: opta por no participar completamente en una prueba de paralelismo. Cuando solo se sostiene un recurso compartido específico, prefiere ResourceLockAttribute, que serializa solo las pruebas que declaran el mismo recurso en lugar de excluirlos de la paralelización por completo. Si una prueba lleva ambos atributos, DoNotParallelizeAttribute tiene prioridad y los bloqueos de recursos declarados no tienen ningún efecto: estas pruebas se ejecutan en la fase secuencial y nunca pasan por el programador paralelo que adquiere bloqueos.

Constructores

Nombre Description
DoNotParallelizeAttribute()

Excluye una prueba, una clase de prueba o un ensamblado de prueba de paralelización en ensamblado. Las pruebas afectadas nunca se ejecutan simultáneamente con ninguna otra prueba en el mismo origen de prueba y, cuando se habilita la paralelización, se aplazan para ejecutarse secuencialmente después de que haya finalizado cada prueba paralelizable en ese origen.

Se aplica a