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

How can I access a data file from a Unit test method?

这是我尝试访问文件的方式-

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

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

在单元测试方法中访问文件如下-

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\")]

None 似乎有效。

生成的文件路径为

"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 文件夹,仍然没有用。

我使用 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");

重新启动 visual studio 使其工作。甚至关闭并重新打开解决方案都不够!!!