【问题标题】:`FileNotFoundException` when running test(s) in VS2013在 VS2013 中运行测试时出现“FileNotFoundException”
【发布时间】:2014-08-05 15:39:44
【问题描述】:

我在使用 VS 2012 后升级到 Visual Studio 2013。 在 VS 2012 中,当创建新的测试项目并将文件添加为“始终复制”时,Visual Studio 将它们复制到 bin/debug 中,并且在运行当前目录(Environment.CurrentDirectory)时为“bin/debug”。 在 VS 2013 中,当前目录是“TestResults/something+guid”,而 VS 2013 不会将文件复制到此文件夹,因此会引发“找不到文件”异常。 如何在 VS2013 中将当前目录改回 bin/debug 以像 VS 2012 一样?

谢谢!

【问题讨论】:

  • 你在运行单元测试项目吗?

标签: visual-studio visual-studio-2012 visual-studio-2013 mstest


【解决方案1】:

处理这种情况的正确方法是使用DeploymentItemAttribute 或测试设置配置以包含您想要的文件。之所以这样,是因为并非所有测试都需要相同的文件,不同的测试可能需要完全不同的配置,或者您可能有多个测试运行并且需要检查测试工件以了解为什么一个运行失败而另一个运行成功(唯一的区别是引用的程序集或松散文件。)此外,当在托管环境(例如 Team Foundation Server)中运行时,在代理服务器上使用相同的模式,编写测试以设置当前目录在运行时会失败在 TFS 测试代理之类的东西上。

顺便说一句,您在测试期间看到的路径实际上不是 VS2013,它是 MS 测试代理本身(第二个进程运行测试以用于沙盒目的,我相信这是自 VS2010 以来的情况。)

听起来您还有一个问题,但几乎可以保证是以下问题之一。在没有看到异常细节的情况下,我做出了最好的猜测,这些是按可能性顺序排列的:

  1. 您有一个松散的文件,例如“test.txt”包含在您的测试项目中,并且您有一个 DeploymentItemAttribute 装饰您的测试方法。但是“test.txt”的“复制到输出文件夹”设置被设置为“不复制”。

    更改此设置,重建,然后重新测试应该可以工作。

  2. 您缺少程序集引用,可能是非 BCL 程序集(或者,更具体地说,您缺少对您正在引用的程序集所引用的程序集的引用。)

    要解决此问题,您应该加载 fuslogvw.exe 并使用日志数据来发现对您的测试项目的任何缺失的程序集引用。

  3. 您引用了针对特定处理器架构(x86、x64 和 MSIL)编译的本机 DLL 或程序集,并且无法在 MS 测试代理运行的处理器架构中加载它。

    解决方案是在运行测试时使用具有正确处理器架构的程序集。

在项目引用、“复制到输出目录”设置和[DeploymentItem] 之间,您的测试应该找到它们所依赖的文件。

如果您需要更多信息,请告诉我,如果您仍有问题,我建议您编辑问题以包含异常详细信息(或至少包含重要部分,例如 TypeMessageStackTrace 的前 5 行。)

【讨论】:

  • 我使用了 DeploymentItemAttribute 并抛出了相同的异常。我可以为一个项目而不是整个解决方案打开测试设置吗?
  • 测试设置是解决方案范围内的,以控制更高级别的有限行为,如果您需要更精细的控制,则必须使用各种测试属性。此外,引用程序集的“内容文件”不会自动复制,您还需要从测试项目中引用内容文件并在测试项目中设置其“复制到输出文件夹”选项.这是设计使然。
  • @NivNavick 您是否检查过您使用 [DeploymentItem] 指定的文件是否已部署到“TestResults/something+guid”文件夹?我问是因为如果您在 [DeploymentItem] 中使用错误的源路径,您将不会收到任何错误消息。
  • @NivNavick 你能发布一个你如何使用 [DeploymentItem] 的例子吗?
猜你喜欢
  • 2017-03-26
  • 2018-09-21
  • 1970-01-01
  • 2017-12-29
  • 2019-10-19
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2014-10-20
相关资源
最近更新 更多