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