如何在C#解决方案中引用不同文件夹中的文件

时间:2015-02-13 08:57:10

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

我想知道是否有人可以帮助我..

我在Visual Studio项目中工作,最近我们开始为我们的项目开展单元测试。

单元测试依赖于在解决方案中引用Excel文件。

我们添加的代码似乎在我们自己的每个环境中都能很好地引用文件,而且一切看起来都不错。

我们现在还设置TFS来触发它在每次提交时使用报告运行所有单元测试,现在已经证明存在一些问题,因为几乎所有报告都失败了,尽管它们都在我们自己的环境中成功运行

TFS似乎没有为测试失败提供任何记录,但我们假设它与路径引用有关。

所以我们的解决方案结构是这样的..

..\head\Solution\Project\project.csproj
..\head\Solution\Tests\TestFiles\spreadsheet.xlsx

我们目前正在使用以下代码来引用电子表格。

string filename = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName, "Tests\\TestFiles\\spreadsheet.xlsx");
ExcelImporter importer = new ExcelImporter(filename);

似乎我们明确地调用了一定数量的父文件夹,这在构建服务器环境中可能不一样。

我们怎样才能更好地引用电子表格文件,假设我们永远不会知道解决方案中有多少个父文件夹呢?

2 个答案:

答案 0 :(得分:4)

我真的不会这样,与本地开发机器相比,构建服务器上运行单元测试的物理路径可能会有很大不同。

一般来说,你应该简单地在单元测试项目中包含(甚至添加它作为链接)对解决方案项(excel文件)的引用,然后你可以将其属性设置为复制到输出文件夹,以便在单元测试程序集时生成excel文件也将被复制到与单元测试程序集相同的位置,然后在测试方法的顶部,您可以使用标准属性以这种方式声明依赖项:

[DeploymentItem("spreadsheet.xlsx")]

这至少适用于MS测试,我们使用它并且没有任何问题。

答案 1 :(得分:3)

在单元测试项目中创建一个文件夹,让我们称之为“资源”,然后将文件复制到那里。确保文件属性将文件设置为始终复制到输出。

然后在你的单元测试中得到这样的文件:

string filename = Path.Combine(Environment.CurrentDirectory, "Resources\\spreadsheet.xlsx");

相关链接:Enviroment.CurrentDirectory