使用文件.使用单元测试创建和删除,但获取被其他进程使用的文件;例外
本文关键字:文件 进程 其他 例外 创建 单元测试 删除 获取 | 更新日期: 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();