2016-03-31 21 views
1

私は、メソッドがテキストファイルに書き込むことを確認するために単体テストを作成しようとしています。私の方法は、テキストファイルMovieList.txtに書き込みます。別のプロセスで使用されているため、ファイルにアクセスできないというエラーが表示され続けました。そこで、別のテキストファイルMovieListTEST.txtに書き込むためのパラメータを受け入れる方法を変更しようとしましたが、それでもわかりません。誰でもこれを正しく行う方法を知っていますか?テキストファイルへの書き込みの単位テスト

これは、ファイルに書き込むための私のコードです:

のparamで編集
public bool WriteMovieListToFile() 
{ 
    try 
    { 
     FileStream fs = new FileStream("MovieList.txt", FileMode.Append, FileAccess.Write); 
     StreamWriter textWriter = new StreamWriter(fs); 

     textWriter.WriteLine(movie.Title); 
     textWriter.WriteLine(movie.Genre); 
     textWriter.WriteLine(movie.Actor); 
     textWriter.WriteLine(movie.Year); 

     textWriter.Close(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error:" + ex.Message); 
     return false; 
    } 
} 

public bool WriteMovieListToFile(string fileLocation) 
{ 
    try 
    { 
     FileStream fs = new FileStream(fileLocation, FileMode.Append, FileAccess.Write); 
     StreamWriter textWriter = new StreamWriter(fs); 

これは私のユニットテストコードです:あなたは閉じる必要が

/// <summary> 
///A test for WriteMovieListToFile 
///</summary> 
[TestMethod()] 
public void WriteMovieListToFileTest1() 
{ 
    Movie movie1 = new Movie("Title", "Genre", "Actor", "Year"); 
    movieSystem.AddMovie(movie1); 
    movieSystem.WriteMovieListToFile("MovieListTEST.txt"); 

    var fileText = File.ReadLines("MovieListTEST.txt"); 
    Assert.IsTrue(fileText.ToString().Length > 1); 
} 
+1

FileStreamを終了する必要がありますか? –

+3

'using'ブロックの中の' FileStream'オブジェクトを囲むと、1つの石で2頭の鳥を殺します。 'FileStream'オブジェクトはメモリ内でまだアクティブで、ファイルをロックしています。 – Andrew

+1

@Andrew私は答えが – aguertin

答えて

3

ちょうどあなたのFileStreamusingブロックを囲み、そのファイルとメモリの両方が解放されます。あなたはStreamWriterと同じことをする機会を取ることができます:あなたのコードも明確かつ短いこのアプローチのよう

public bool WriteMovieListToFile() 
{ 
    try 
    { 
     using (FileStream fs = new FileStream("MovieList.txt", FileMode.Append, FileAccess.Write)) 
     using (StreamWriter textWriter = new StreamWriter(fs)) 
     { 
      textWriter.WriteLine(movie.Title); 
      textWriter.WriteLine(movie.Genre); 
      textWriter.WriteLine(movie.Actor); 
      textWriter.WriteLine(movie.Year); 
     } 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error:" + ex.Message); 
     return false; 
    } 
}   

StreamWriter.Dispose()は、.Close()と同じこと。

ところで、textWriterからstreamWriterに名前を変更していますので、そのタイプと一致しています。

1

あなたがそれをした後のあなたのfilestream。

public bool WriteMovieListToFile() 
{ 
    try 
    { 
     FileStream fs = new FileStream("MovieList.txt", FileMode.Append, FileAccess.Write); 
     StreamWriter textWriter = new StreamWriter(fs); 

     textWriter.WriteLine(movie.Title); 
     textWriter.WriteLine(movie.Genre); 
     textWriter.WriteLine(movie.Actor); 
     textWriter.WriteLine(movie.Year); 

     textWriter.Close(); 
     fs.Dispose(); 
     fs.Flush(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error:" + ex.Message); 
     return false; 
    } 
} 
+0

これは 'Stream'や他の' IDisposable'オブジェクトを扱う方法ではありません... –

関連する問題