Domanda

Per favore, scusa il titolo ambiguo; È difficile descrivere in una sola riga.

Fondamentalmente abbiamo test mBUnit che funzionano bene usando TestDreven da Visual Studio, ma fallisce quando si tenta di eseguire i test tramite ilu003Cgallio> compito dall'interno di Nant.

Il fallimento ha a che fare con i test che tentano di leggere i file; Leggono i file relativi alla directory corrente, ad esempio ".. .. file dir qualunque". Tuttavia, il problema sembra essere che Gallio copia le dll di test su una directory altrove e imposta la directory corrente in "%homedir% appdata local temp gallio mstestadapter casualname testdir out qualcosa".

Quindi la mia domanda è duplice: dove dovrei mettere i file richiesti dai test in modo che possano essere trovati in fase di esecuzione e come dovrei riferirmi a loro dal codice?

(Inoltre, non pensavo che stessimo usando MS-Test, quindi come mai c'è una directory "MStest" lì dentro?)

È stato utile?

Soluzione

Sebbene utilizziamo nunit invece di mbunit, penso che ci siano alcuni consigli generali che posso dare per quanto riguarda la gestione dei file nei test unitari.

Non fare mai affidamento sui percorsi, né assoluti né relativi. Mantieni il controllo sui percorsi all'interno dei tuoi test. Questo è quello che facciamo:

  1. Aggiungi una cartella denominata Resources al tuo progetto di test (quindi hai tutto in un unico posto)
  2. Inserisci i file richiesti lì (ad esempio MyFile.txt)
  3. Aggiungi i file al progetto tramite Add > Existing Item... (Quindi i tuoi file sono mantenuti con le tue fonti. Vengono distribuiti in seguito come parte dell'assemblaggio del progetto di prova)
  4. Aggiungi i file alle risorse del progetto di prova (scheda Resources Nelle proprietà del progetto, Add Resource > Add Existing File...)
  5. Usa il file nel dispositivo di prova:
    1. Definisci un campo percorso del file nella classe di dispositivo (usa Path.GetTempFileName() Dal momento che hai un percorso unico e è molto probabile che tu abbia diritti di accesso sufficienti su qualsiasi macchina)
    2. Crea un file locale utilizzando il percorso del file durante la configurazione del test
    3. Usa il file nel test
    4. Elimina il file creato durante lo strappo

Ecco un campione:

[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);
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top