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

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

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

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

  2. 通过添加->现有项目添加了一个文件。设置 Build Action=None,Copy To Output Directory= Copy Always

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

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

最佳答案

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

关于c# - 如何从单元测试方法访问数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28111201/

相关文章:

c# - TPL数据流,数据 block 收到第一项时的通知

visual-studio-2010 - 如何使用Dapper从数据库生成模型?

c++ - 从 Win32 应用程序调用 REST 服务

unit-testing - ReactJS:未经测试文件的 Jest 覆盖率报告显示覆盖率 0%

c# - Visual Studio 2015 单元测试不一致

c# - ASP.NET 框架错误

c# - 第二个参数没有传递给 Controller (ViewModel)

c# - Linq-to-sql 外键 id 未自动添加

visual-studio-2010 - 编辑文件 “Microsoft Visual Studio 2010 has stopped working”

java - Junit 控制台输出到日志