5

我有 Coded-UI 测试项目,它引用了解决方案中的其他程序集。不知何故,有些程序集没有复制到TestResults/Out目录中,而另一些则被复制了。所有程序集都有Copy Local选项true(不知道它是否真的很重要)并且在其他选项中是绝对平等的。当我从 VS2010 本地开始测试时,所有程序集都会被复制,但在构建服务器上时不会。

如果我使用[DeploymentItem]属性强制部署这些“顽皮”程序集,它们会成功部署。

我无法理解 - 我一直认为,如果您引用程序集(在 的References部分中Solution Explorer),该程序集将被复制到TestResults/Out并且[DeploymentItem]需要复制一些 .xml 和其他配置文件。

4

1 回答 1

14

我以前见过这个。您的测试项目引用了其他项目,但是当测试运行时,您会注意到程序集不在 TestRun Out 文件夹中。

与从固定位置运行单元测试的其他测试运行程序不同,MSTest 将它需要的程序集复制到执行测试的测试运行文件夹中。该设计允许您比较测试运行之间的测试结果、覆盖率和输出。

常见的误解是,像“复制本地”这样的编译设置会以某种方式影响用于测试的依赖项,这根本不是真的。MSTest 使用反射来确定测试运行所需的程序集引用。

您看到的错误可能是因为您引用了程序集但测试程序集没有直接使用它。您可以通过使用 IL 检查实用程序(DotPeek、Reflector 等)查看测试组装参考来验证这一点。(这通常是在 XAML 中引用程序集的 WPF 项目中的问题。)

要修复,请使用 DeploymentSettings 将程序集复制到输出文件夹;或在测试项目中使用该程序集。例如,将以下内容添加到您的测试项目将发出 IL 以确保部署程序集:

var type = typeof(AssemblyNotBeingCopied.MyClass);
于 2013-03-08T19:12:03.467 回答