VS2008:单元测试中文件创建失败了吗?

时间:2010-04-01 03:34:13

标签: c# .net visual-studio-2008 unit-testing io

我正在使用VS 2008在C#.NET中实现一个相当简单的XML序列化器/反序列化器(日志文件解析器)应用程序。我现在有大约50个单元测试用于代码的各个部分(主要用于各种序列化)操作),其中一些似乎在处理文件I / O时大多是随机失败。

测试结构的方式是在测试设置方法中,我在某个预定位置创建一个新的空文件,并关闭我回来的流。然后我在文件上运行一些基本的测试(根据测试的具体情况而变化)。在清理方法中,我再次删除该文件。

我的单元测试的一大部分(通常是30或更多,尽管运行数量不同)将在初始化方法失败,声称他们无法访问我正在尝试创建的文件。我无法确定原因,因为一次运行的测试将失败。当他们单独奔跑时,他们都会成功。

这里有什么问题?为什么我不能跨多个单元测试访问此文件?

单位测试的相关方法会在某些时候失败:

[TestInitialize()]
public void LogFileTestInitialize()
{
    this.testFolder = 
        System.Environment.GetFolderPath(
            System.Environment.SpecialFolder.LocalApplicationData
        );
    this.testPath = this.testFolder + "\\empty.lfp";
    System.IO.File.Create(this.testPath).Close();
}

[TestMethod()]
public void LogFileConstructorTest()
{
    string filePath = this.testPath;
    LogFile target = new LogFile(filePath);
    Assert.AreNotEqual(null, target);
    Assert.AreEqual(this.testPath, target.filePath);
    Assert.AreEqual("empty.lfp", target.fileName);
    Assert.AreEqual(this.testFolder + "\\empty.lfp.lfpdat", target.metaPath);
}

[TestCleanup()]
public void LogFileTestCleanup()
{
    System.IO.File.Delete(this.testPath);
}

LogFile()构造函数:

public LogFile(String filePath)
{
    this.entries = new List<Entry>();
    this.filePath = filePath;
    this.metaPath = filePath + ".lfpdat";
    this.fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
}

准确的错误消息:

  

初始化方法   LogFileParserTester.LogFileTest.LogFileTestInitialize   扔了例外。   System.IO.IOException:   System.IO.IOException:进程   无法访问该文件   'C:\用户\&lt;使用者&GT; \应用程序数据\本地\ empty.lfp'   因为它被另一个人使用   过程..

2 个答案:

答案 0 :(得分:2)

您应该模拟文件系统访问,而不是在单元测试中实际读取/写入文件。

答案 1 :(得分:0)

听起来有些测试正在同时进行。各个测试是写入文件还是只读它?如果它们是只读的,我确信我们可以进行一些小改动,使它们能够同时运行。更多细节?