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

C# 如何从单元测试方法访问数据文件?,c#,visual-studio-2010,unit-testing,C#,Visual Studio 2010,Unit Testing,下面是我试图访问该文件的方式- 我在单元测试项目中添加了一个文件夹“TestData” 通过添加->现有项添加文件。设置生成操作=无,复制到输出目录=始终复制 访问单元测试方法中的文件,如下所示- string fileName = System.IO.Path.Combine( System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().

下面是我试图访问该文件的方式-

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

  • 通过添加->现有项添加文件。设置生成操作=无,复制到输出目录=始终复制

  • 访问单元测试方法中的文件,如下所示-

    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文件夹中。我正在使用VisualStudio2010

    我在VisualStudio2012的另一个项目中执行了相同的步骤,似乎找到了文件并按预期工作

    编辑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
    ,与
    bin
    Properties
    等的级别相同

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

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

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

    谢谢,但是Linq或Guard类不可用于我的测试!好吧,你可以忽略这个防护,它只是一个安全检查,并不重要,只是一个提示:单元测试不应该接触任何外部资源(文件、数据库等)。若您需要在单元测试中测试某些功能,那个么您需要模拟这些功能。