16

我试图在单元测试期间访问我的解决方案结构中的文件。我的单元测试项目有bin\Debug\作为输出目录。所以我编写了代码,假设Path.GetFullPath(".") 在我的单元测试中会给我这个 bin 文件夹。但它的作用是给我一个临时位置作为路径。

C:\Users\[username]\AppData\Local\Temp\TestResults\[username]_[machine_name] 2013-05-16 08_31_07\Out

所以很明显我的单元测试无法访问我的解决方案中的文件。如果有人知道如何在单元测试项目的 bin 文件夹中运行单元测试,请提供帮助。

4

6 回答 6

13

您可以通过使用 .runsettings 文件并设置<DeploymentEnabled>false</DeploymentEnabled>. 请参阅此处的“备注”部分。但是,如果您使用的是 .testsettings 文件,则无法执行此操作,并且如果您希望能够检查测试在运行失败后读取或写入的任何文件,您可能无法执行此操作,因为它们可能是被进一步的测试等污染。

另一种选择是使用部署项,这可以DeploymentItemAttribute通过 .testsettings 文件或通过您的 .testsettings 文件来完成。属性机制是首选,基本上,在您需要为您部署文件的测试方法上,请执行以下操作:

[DeploymentItem(@"source", @"target")]
public void Test1() {}

其中source是相对于构建输出文件夹的路径或绝对路径,而target是相对于运行测试的路径或绝对路径。您可以保留目标参数,在这种情况下,它将假定目标为“.”,即运行测试的文件夹。这方面的文档在这里

于 2013-05-16T03:48:28.490 回答
2

另一个可能适合您的选项是使用 NUnit 而不是 MSTest。在这种情况下,测试在 bin\debug 目录中执行

于 2013-05-16T08:21:48.423 回答
1

这是针对使用 Visual Studio 2015 可能遇到此问题的任何人的更新。与@guysherman 一致,我的解决方案资源管理器中的解决方案文件下有一个解决方案项目文件夹,并且应该有一个 .testrunco​​nfig 文件。如果您使用 Visual Studios 打开它,启用部署是顶部的一个复选框,您可以取消选中它。

我遇到了同样的问题,每次运行单元测试时,我的测试都将 .dll 部署到 TestRun 文件夹,但是可执行文件中包含的 .config 文件引用了另一个 common.config,它没有与其他所有内容一起部署,所以我从未连接到我的 SQL 服务器,因为它是在 common.config 中指定的。取消选中 Enable Deployment 选项会直接从项目中指定的 bin 文件夹运行我的测试。

于 2016-10-18T15:05:28.800 回答
0

这似乎是一个 Visual Studio 错误。这是我为修复它所做的(神奇地起作用了!):

  1. 移动/重命名local.testsettings文件。
  2. 尝试再次运行测试(不会运行)
  3. 再把local.testsettings文件放回去。
  4. 它现在应该运行失败的测试!
于 2018-08-08T19:06:13.223 回答
0

如果您尝试访问假定位于默认文件夹中的文件或资源,则可以尝试为它们提供程序集位置的显式目录。一个例子:

string dataSource = AppDomain.CurrentDomain.BaseDirectory + "TestDb.mdb";

AppDomain.CurrentDomain.BaseDirectory 通常解析为实际的装配位置,这是您计划的。

于 2015-12-27T13:38:47.567 回答
0

我们在 VS 2017 中遇到了这个问题,但我们的问题是 log4net.config 没有被复制到 TestResults 文件夹(即使 Copy Always 是真的)。

LocalTestRun.testrunconfig我们的解决方案是从文件夹中删除Solution Items文件(直接在解决方案下)。当我们这样做时,它开始使用 \bin\debug\ 文件夹并找到我们的 log4net.config 文件。

于 2018-05-31T21:24:06.973 回答