C# 写入文本文件的单元测试
我正在尝试编写一个单元测试,以确保该方法正在写入文本文件。我的方法写入文本文件C# 写入文本文件的单元测试,c#,winforms,unit-testing,C#,Winforms,Unit Testing,我正在尝试编写一个单元测试,以确保该方法正在写入文本文件。我的方法写入文本文件MovieList.txt。我不断收到一个错误,说它无法访问该文件,因为它正被另一个进程使用。因此,我尝试更改方法以接受一个参数来写入另一个文本文件,MovieListTEST.txt,但我仍然无法理解它。有人知道怎么做吗 这是我要写入文件的代码: public bool WriteMovieListToFile() { try { FileStream fs = new FileStr
MovieList.txt
。我不断收到一个错误,说它无法访问该文件,因为它正被另一个进程使用。因此,我尝试更改方法以接受一个参数来写入另一个文本文件,MovieListTEST.txt
,但我仍然无法理解它。有人知道怎么做吗
这是我要写入文件的代码:
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);
}
//
///WriteMovieListToFile的测试
///
[TestMethod()]
公共无效WriteMovieListToFileTest1()
{
电影1=新电影(“片名”、“类型”、“演员”、“年份”);
movieSystem.AddMovie(movie1);
movieSystem.WriteMovieListToFile(“movielistest.txt”);
var fileText=File.ReadLines(“movielistest.txt”);
Assert.IsTrue(fileText.ToString().Length>1);
}
处理完文件流后,需要关闭文件流
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;
}
}
只需使用块将
文件流
封装在中,即可释放文件和内存。您可以借此机会使用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
,这样它与它的类型一致。文件流需要关闭吗?使用块将文件流
对象包围在内,你会一举两得。FileStream
对象在内存中仍然处于活动状态,并锁定了您的文件。@Andrew我很确定这就是answer@Andrew是的,您需要处理文件流。这不是处理Stream
和其他IDisposable
对象的方式。。。