gpt4 book ai didi

c# - 在单元测试期间创建文件 - 无法打开它进行写入 - TestDriven.Net 和 NUnit

转载 作者:太空狗 更新时间:2023-10-29 23:34:37 27 4
gpt4 key购买 nike

我正在测试一些需要使用 FileInfo 和 DirectoryInfo 对象的代码,而不是编写一个包装器和几个接口(interface)来解决这个问题,我认为在开始测试时创建一些文件然后删除它们是个好主意测试完成后的文件。这是我创建文件的方式:

public static void CreateTestSchedules(int quantity)
{
String folder = Path.Combine(Directory.GetCurrentDirectory(), "FolderFiles");
for(int quantity=10; quantity > 0; quantity--)
{
String filename = Path.GetTempFileName();
using (FileStream fileStream = File.Create(Path.Combine(folder, filename)))
{
XDocument fileContent = Helper.CreateContent(filename);
Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(fileContent.ToString());

fileStream.Write(bytes, 0, bytes.Length);
fileStream.Flush();
fileStream.Close();
}
}
}

此时,我没有发现问题:文件已在文件夹下创建,一切正常。

然后,当测试继续执行时,我尝试打开其中一个文件并在其中写入一些内容,我得到一个异常,指示我要打开写入的文件正在被其他进程使用,并且,在检查了更多细节之后,我发现 TestDriven.Net 进程是阻止文件的进程。这是我用来打开并尝试将数据写入文件的代码:

using (FileStream file = new FileStream(filename, FileMode.Append))
{
Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(dataToWrite.ToString());
if (file.CanWrite)
{
file.Write(bytes, 0, bytes.Length);
}
}

我的问题是:为什么会这样?没有正确释放文件句柄?有没有办法从 TestDriven.Net 窃取锁?我应该以不同的方式创建这些文件吗?我应该以其他方式编写测试吗?

提前感谢您的回答和评论=)。

编辑:

为了解决这个特定问题(真正的问题,正如 Dave Swersky 提到的那样,是单元测试不应该接触文件系统)我使用了 James Wiseman 发送的链接(再次感谢 James =) 并创建了带有 FileShare 标志的文件,这样我就可以进入文件,打开它并写入它。像这样:

 using (FileStream fileStream = new FileStream( filename, FileMode.Create, FileAccess.ReadWrite, **FileShare.ReadWrite**))

这样我就可以打开文件并将其写入文件。 =)

最佳答案

这可能不是您正在寻找的答案,但这正是您应该使用模拟而不是实际创建文件的原因。

这是模拟文件系统的现成解决方案:http://bugsquash.blogspot.com/2008/03/injectable-file-adapters.html

关于c# - 在单元测试期间创建文件 - 无法打开它进行写入 - TestDriven.Net 和 NUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4670890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com