Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
| Propiedad | Value |
|---|---|
| Identificador de la regla | MSTEST0074 |
| Title | La prueba de la mutación del estado global del proceso debe declarar un bloqueo de recursos |
| Category | Usage |
| La corrección es disruptiva o no disruptiva | Non-breaking |
| Habilitado de forma predeterminada | Yes |
| Gravedad predeterminada | Información |
| introducido en la versión | 4.4.0 (versión preliminar) |
| ¿Hay una corrección de código? | Sí, solo para C# |
Importante
ResourceLockAttribute está planeado para MSTest 4.4 y solo está disponible en compilaciones en versión preliminar hasta que se publique MSTest 4.4.0.
Note
Este analizador solo se activa cuando la paralelización de ensamblados está habilitada sintácticamente, por ejemplo, sin [assembly: Parallelize] una coincidencia [assembly: DoNotParallelize]o cuando un .editorconfig archivo establece mstest_parallel_safety_mode = always. El analizador no puede detectar la paralelización habilitada solo a través .runsettings de propiedades de MSBuild o como MSTestParallelizeWorkers. Establezca la opción si configura la .editorconfig paralelización de esa manera y desea que este analizador se ejecute.
Causa
Una prueba, o un método de accesorio con ámbito de clase en el que se ejecuta, llama a Environment.SetEnvironmentVariable o sin una coincidencia [ResourceLock] o/Console.SetOut[DoNotParallelize]/SetErrorSetIn .
Descripción de la regla
La mutación del estado global del proceso, como las variables de entorno o la redirección de consola, desde una prueba no es segura una vez habilitada la paralelización en ensamblado, ya que una prueba del mismo nivel que se ejecuta simultáneamente observa la mutación. A diferencia [ResourceLock]de , que produce un error al abrir cuando se olvida una clave, esta regla marca la mutación en tiempo de compilación.
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test"); // Violation
}
Cómo corregir infracciones
Declare [ResourceLock] con la clave coincidente WellKnownResources para serializar las pruebas contendientes o agregue [DoNotParallelize] para excluir la prueba de paralelización.
[ResourceLock(WellKnownResources.EnvironmentVariables)]
[TestMethod]
public void SetsVariable()
{
Environment.SetEnvironmentVariable("MODE", "test");
}
Una corrección de código de C# agrega el [ResourceLock] atributo automáticamente, en el método de prueba o, para un accesorio con ámbito de clase como [TestInitialize], en la clase de prueba. Visual Basic código tiene este diagnóstico, pero no tiene una corrección automática; agregue el atributo a mano.
Cuándo suprimir las advertencias
No suprima advertencias de esta regla sin declarar un bloqueo o no participar en la paralelización, ya que, al hacerlo, la mutación se ejecuta de forma silenciosa frente a pruebas de ejecución simultánea.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable MSTEST0074
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0074
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad a none en el archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0074.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.