2016-09-20 3 views
1

UWPで実行するためにいくつかのユニットテストをセットアップする必要があります。単体テストはディスク上のファイルで動作します。ファイルの場所はフルパス(C:\ Temp \など)として設定されています。UWPユニットテストでのファイル処理

Visual Studio 2015でユニットテストアプリケーションを作成しました。アプリケーションマニフェストで、インターネット(クライアント)、プライベートネットワーク、およびリムーバブルストレージを確認しました。また、私のファイルタイプ(.dat)のファイルアソシエーションをセットアップしました。

テストを実行すると、テストでディスク上のファイルを開こうとするとアクセス拒否例外が発生します。ファイルはFileStreamクラスを使用して開きます。
例外メッセージ:テストメソッドUnitTests.TestMethod1例外をスロー: System.UnauthorizedAccessException: 'C:\ Temp \ file.dat'へのアクセスが拒否されました。

ディスク上の任意のファイルを開くことができるようにテストアプリケーションを設定するにはどうすればよいですか?更新

:さらなる研究の後、私は、UWP(テスト)アプリケーションからディスク上のプログラムで任意のファイルを開くことはできませんあなたを信じて、このとき

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; 
    } 
} 

: これはサンプルのテストですファイル選択ツールを使用してファイルを選択して開く必要があります。

+2

ファイルアクセスを抽象化して単体テストのために試してみることができます – Nkosi

+1

ファイルにアクセスしようとする方法の[mcve]を表示 – Nkosi

+0

ディスクにヒットしたユニットテストが悪い(遅い、アクセスの問題、失敗別のOSで)。コードとテストを表示すると、ディスクにヒットしない方法を示すことができます。 – zhon

答えて

0

私はあなたのアプリをテストするための画像の固定サンプルが必要と仮定します。これらのサンプルを追加して、ユニットテストアプリのAssetsフォルダを言うようにします。テスト用に使用するAssetsフォルダ内のサンプルファイルごとに、 Build actions = "Content"というようなプロパティを設定します。これにより、ビルド後にAppディレクトリにファイルが追加されます。そして、あなたはこのようなあなたのファイルにアクセスすることができます

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

この事実に試験サンプルは、アプリケーションのサンドボックスに常にあることを、保証します。

もちろん、何らかの処理をテストする場合は、[TestInitialize]メソッドでアセットからアプリケーションのルートフォルダにファイルをコピーしてから、テストを終了した後で[TestFinalize]セクションでファイルを削除できます。私はSQLiteデータベース上のいくつかのDB操作をテストするためにこのアプローチを使用しています(これはAssetsからrootにファイルとして移動し、テスト後に削除します)。それは私のために働く(VS 2017 UWPアプリ)ので、あなたのためにも必要です。

関連する問題