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
对象的方式。。。