2016-09-20 3 views
1

Ich muss einige Komponententests einrichten, um auf UWP zu laufen. Die Komponententests arbeiten mit Dateien auf der Festplatte. Der Speicherort der Dateien ist als vollständiger Pfad konfiguriert (z. B. C: \ Temp).Dateibehandlung in UWP-Unit-Tests

Ich habe eine Unit-Test-Anwendung in Visual Studio 2015 erstellt, im Anwendungsmanifest habe ich Internet (Client), Private Networks und Wechselmedien überprüft. Ich habe auch eine Dateizuordnung für meinen Dateityp (.dat) eingerichtet.

Wenn ich die Tests ausführen bekomme ich Zugriff verweigert, wenn die Tests versuchen, die Dateien auf der Festplatte zu öffnen. Die Dateien werden mit der FileStream-Klasse geöffnet.
Ausnahmebedingungsnachricht: Testmethode UnitTests.TestMethod1 warf Ausnahme: System.UnauthorizedAccessException: Zugriff auf den Pfad 'C: \ Temp \ file.dat' wird verweigert.

Wie kann ich die Testanwendung einrichten, um beliebige Dateien auf der Festplatte zu öffnen?

Update: Dies ist ein Beispieltest:

public class UnitTest1 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     // 1. Open the file using a FileStream 
     FileStream fs = new FileStream("C:\\Temp\\file.dat", FileMode.Open, FileAccess.Read, FileShare.Read); 

     // or 
     // 2. Open the file using UWP file API 
     Task<Stream> ts = GetStream(); 
     Stream s = ts.Result; 
    } 

    async private Task<Stream> GetStream() 
    { 
     Windows.Storage.StorageFile sf = await Windows.Storage.StorageFile.GetFileFromPathAsync("C:\\Temp\\file.dat"); 
     Stream s = await sf.OpenStreamForReadAsync(); 

     return s; 
    } 
} 

In diesem Moment nach einer weiteren Studie, ich glaube, dass es nicht möglich ist, programmatisch beliebige Dateien auf der Festplatte zu öffnen, von einem UWP (Test) Anwendung, Sie muss eine Dateiauswahl verwenden, um eine Datei auszuwählen und sie dann zu öffnen.

+2

Sie könnten versuchen, den Dateizugriff zu abstrahieren, so dass Sie es für Ihre Unit-Tests verspotten könnte ein [MCVE] von – Nkosi

+1

Zeigen Sie, wie Sie versuchen, die Datei – Nkosi

+0

Unit-Tests zuzugreifen, die die Platte schlecht getroffen sind (langsam, Zugangsprobleme, Versagen auf verschiedenen Betriebssystemen). Wenn Sie Ihren Code und Tests zeigen, könnten wir Ihnen zeigen, wie Sie die Festplatte nicht treffen. – zhon

Antwort

0

Ich nehme an, dass Sie eine bestimmte Probe von Bildern benötigen, um Ihre App zu testen. Ich würde versuchen, diese Beispiele hinzuzufügen, sagen wir Assets-Ordner Ihrer Unit-Test-App. Dann legen Sie für jede Beispieldatei im Assets-Ordner, die Sie zum Testen verwenden möchten, die Eigenschaften Build actions = "Content" fest. Dadurch wird die Datei nach dem Build zum App-Verzeichnis hinzugefügt. Dann können Sie Ihre Dateien wie folgt zugreifen:

StorageFolder assets = await Package.Current.InstalledLocation.GetFolderAsync("Assets"); 
StorageFile myTestFile = await assets.GetFileAsync("file1.jpeg"); 

Diese in der Tat stellt sicher, dass die Testproben sind immer in der Sandbox der Anwendung.

Natürlich, wenn Sie eine Art von Verarbeitung testen, können Sie zuerst Ihre Dateien von den Assets in den Stammordner der App in der Methode [TestInitialize] kopieren und nach Abschluss der Tests sie im Abschnitt [TestFinalize] löschen . Ich verwende diesen Ansatz zum Testen einiger DB-Operationen in der SQLite-Datenbank (die ich als Datei von Assets nach root verschiebe und nach dem Test lösche ich sie). Es funktioniert für mich (VS 2017 UWP App) also sollte es auch für Sie sein.