使用文件.使用单元测试创建和删除,但获取被其他进程使用的文件;例外

本文关键字:文件 进程 其他 例外 创建 单元测试 删除 获取 | 更新日期: 2023-09-27 18:15:17

我有这样一个单元测试:

   [Test]
   public void ProcessDbFile_should_delete_file_if_it_exists_then_copy_new_file_to_same_location()
   {
       // used to create condition where file already exists
       if (!File.Exists(path2))
            File.Create(path2);
       _dbInstaller.ProcessDbFile(path1);
       File.Exists(path2).ShouldBe(true);
       errorReceived.ShouldBe(null);
   }

发生的事情是当我进入ProcessDbFile例程中的这一部分时:

   if (File.Exists(path2))
       _dbDropper.DropDb();

然后变成这个:

public bool DropDbStub()
{
   try
   {
      File.Delete(@"c:'dbdata'data.mdf");
   }
   catch
   {
      return false;
   }
  return true;
}

我得到一个异常,文件正在被另一个进程使用。

我想我的主要问题是单元测试是一个单独的过程?

如果我注释掉单元测试的前两行:

//if (!File.Exists(path2))//File.Create (path2);

我没有得到异常,即使文件已经存在,删除按照计划发生,只有当我在单元测试中有这些前2行(并且它确实跳转到创建行,不知何故单元测试似乎对文件有一个锁。我能做些什么来克服这个问题,保持测试正常工作,这是测试删除一个文件,如果它已经存在,并首先创建它,如果它不存在?

使用文件.使用单元测试创建和删除,但获取被其他进程使用的文件;例外

File.Create(path2)打开了一个流到你从未关闭的文件。

你的代码应该是:

if (!File.Exists(path2))
    File.Create(path2).Close();