¿Cómo establecer la ruta del archivo de prueba para las pruebas de mbunit con Gallio a través de NANT?

StackOverflow https://stackoverflow.com/questions/4889319

Pregunta

Disculpe el título ambiguo; Es difícil de describir en una sola línea.

Básicamente tenemos pruebas de mbunit que funcionan bien usando TestIndiven desde Visual Studio, pero falla cuando intentan ejecutar las pruebas a través delu003Cgallio> Tarea de dentro de Nant.

La falla tiene que ver con las pruebas que intentan leer archivos; Leen archivos en relación con el directorio actual, por ejemplo ".. .. archivos dir lo que sea". Sin embargo, el problema parece ser que Gallio copia las DLLS de prueba a un directorio en otro lugar, y establece que el directorio actual es "%homedir% appData local temp Gallio mstestadapter randomName testDir out time".

Entonces, mi pregunta es doble: ¿dónde debo poner archivos que requieren las pruebas para que se puedan encontrar en tiempo de ejecución, y cómo debería referirme a ellos desde el código?

(Además, no pensé que estuviéramos usando MS-Test en absoluto, entonces, ¿cómo es que hay un directorio 'MSTEST' allí?)

¿Fue útil?

Solución

Aunque usamos NUNIT en lugar de MBunit, creo que hay algunos consejos generales que puedo dar con respecto a manejar archivos en las pruebas unitarias.

Nunca confíe en los caminos, ni absoluto ni relativo. Mantenga el control sobre las rutas dentro de sus pruebas. Esto es lo que hacemos:

  1. Agregue una carpeta llamada Resources a su proyecto de prueba (para que tenga todo en un solo lugar)
  2. Ponga los archivos requeridos allí (por ejemplo MyFile.txt)
  3. Agregue los archivos a su proyecto a través de Add > Existing Item... (Por lo tanto, sus archivos se mantienen con sus fuentes. Se implementan después como parte del ensamblaje de su proyecto de prueba)
  4. Agregue los archivos a los recursos de su proyecto de prueba (pestaña Resources En las propiedades del proyecto, Add Resource > Add Existing File...)
  5. Use el archivo en su accesorio de prueba:
    1. Defina un campo de ruta de archivo en su clase de accesorio (use Path.GetTempFileName() Dado que tiene una ruta única y es muy probable que tenga suficientes derechos de acceso en cualquier máquina)
    2. Cree un archivo local utilizando la ruta del archivo durante la configuración de la prueba
    3. Use el archivo en su prueba
    4. Eliminar el archivo creado durante la separación

Aquí hay una muestra:

[TestFixture]
public class MyFixture
{
  private static readonly string MyFilePath = Path.GetTempFileName();

  [SetUp]
  public void SetUp()
  {
    // use File.WriteAllBytes for binary files
    File.WriteAllText(MyFilePath, Properties.Resources.MyFile);
  }

  [Test]
  public void TestSomething()
  {
    Assert.That(ObjectUnderTest.UseFile(MyFilePath), Is.True);
  }

  [TearDown]
  public void TearDown()
  {
    File.Delete(MyFilePath);
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top