如何在bin文件夹中运行单元测试

时间:2013-05-16 03:34:55

标签: .net unit-testing visual-studio-2012 mstest

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

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

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

6 个答案:

答案 0 :(得分:13)

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

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

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

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

答案 1 :(得分:2)

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

中执行

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

这似乎是Visual Studio的错误。这是我修复它的方法(神奇地起作用了!):

  1. 已移动/重命名local.testsettings文件。
  2. 试图再次运行测试(不会运行)
  3. 再次放回local.testsettings文件。
  4. 现在应该运行失败的测试!

答案 5 :(得分:-2)

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

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

AppDomain.CurrentDomain.BaseDirectory通常会解析为您正在计划的实际装配位置。