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 | MSTEST0077 |
| Title | Evitar rutas de acceso codificadas o compartidas del sistema de archivos en una prueba en paralelo |
| 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? | No |
Importante
TestContext.TestTempDirectory 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 pasa una ruta de acceso absoluta constante o un literal de ruta de acceso relativa directamente a un método de mutación File.*/Directory.* del sistema de archivos, como File.WriteAllText o Directory.CreateDirectory.
Descripción de la regla
Una ruta de acceso constante codificada o relativa tiene como destino una ubicación compartida por todas las demás pruebas del ensamblado. En paralelización en ensamblado, dos pruebas pueden escribir en la misma ubicación simultáneamente y colisionar.
[TestMethod]
public void WritesReport()
{
File.WriteAllText("report.txt", contents); // Violation
}
Solo se marcan las rutas de acceso constantes estáticas que se pasan a una API de mutación. Las lecturas, la construcción de rutas de acceso y las rutas de acceso creadas a partir de variables se dejan para revisar manualmente, ya que el analizador no puede indicar si dos pruebas realmente colisionan en una ruta de acceso calculada.
Cómo corregir infracciones
Use una ubicación única por prueba, como TestContext.TestTempDirectory, en lugar de una ruta de acceso fija o relativa.
[TestMethod]
public void WritesReport()
{
string path = Path.Combine(TestContext.TestTempDirectory!, "report.txt");
File.WriteAllText(path, contents);
}
Cuándo suprimir las advertencias
Es seguro suprimir esta advertencia si la ruta de acceso tiene como destino intencionadamente un accesorio que cada prueba lee pero no escribe pruebas simultáneamente, o si las pruebas que escriben en ella ya están coordinadas, por ejemplo a través [DoNotParallelize]de .
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 MSTEST0077
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0077
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.MSTEST0077.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.