如何从Unit测试方法访问数据文件?

时间:2015-01-23 13:39:55

标签: c# visual-studio-2010 unit-testing

以下是我尝试访问该文件的方法 -

  1. 我在单元测试项目中添加了一个文件夹“TestData”

  2. 通过Add->现有项添加了一个文件。设置构建操作=无,复制到输出目录=始终复制

  3. 使用单元测试方法访问文件,如下所示 -

    string fileName = System.IO.Path.Combine(
                System.IO.Path.GetDirectoryName(
                System.Reflection.Assembly.GetExecutingAssembly().Location), "TestData\\TestExcel2007File1.xlsx");
    
    XmlDocument actual;
    actual.Load(fileName);       //Throws exception saying cannot find part of the file path
    

    我也尝试将Method属性用作 -

    [TestMethod, DeploymentItem(@"Test Data\", @"Test Data\")]
    

    似乎无效。

    生成的文件路径是

    "D:\\MyProject\\TestResults\\MACHINE_NAME 2015-01-23 05_21_45\\Out\\TestData\\TestExcel2007File1.xlsx"
    

    Out文件夹没有 TestData 文件夹或Excel文件。

    编辑:我引用的程序集出现在Out文件夹中。我正在使用Visual Studio 2010。

    我在Visual Studio 2012中的不同项目中执行了相同的步骤,并且似乎找到了该文件并按预期工作。

    编辑2 :我发现TestData文件夹已复制到 bin \ debug 文件夹中,而不是在生成的路径中。但引用的程序集将复制到生成的路径中!

    编辑3 :添加了一个测试设置文件,并选中了启用部署菜单,在附加文件和目录中添加了TestData文件夹以进行部署,但仍然无法正常工作。

2 个答案:

答案 0 :(得分:2)

我使用xUnit并以这种方式工作:

public static string GetImportPath()
{
    string[] importPaths =
    {
            @"TestData", @"..\TestData", @"..\..\TestData",
    };
    string importPath = importPaths.FirstOrDefault(Directory.Exists);
    Guard.NotNull(importPath, "importPath not found");
    return importPath;
}

我的项目文件夹中有TestData文件夹,与binProperties等级相同。

在您的情况下,您可以像这样使用它:

string fileName = Path.Combine(GetImportPath(), "TestExcel2007File1.xlsx");

答案 1 :(得分:1)

重新启动visual studio使其正常工作。甚至没有关闭并重新打开解决方案就足够了!!!