我有 Coded-UI 测试项目,其中引用了解决方案中的其他程序集。不知何故,有些程序集没有复制到 TestResults/Out
目录,而其他则被复制。所有组件都有 Copy Local
选项 true
(不知道它是否真的很重要)并且在其他选项中绝对平等。当我从 VS2010 本地开始测试时,所有程序集都会被复制,但在构建服务器上时不会。
如果我使用 [DeploymentItem]
属性来强制部署他们成功部署的这些“顽皮”程序集。
我无法理解 - 我一直认为,如果您引用程序集(在 References
的 Solution Explorer
部分),该程序集将被复制到 TestResults/Out
和 [DeploymentItem]
需要复制一些 .xml 和其他配置文件。
最佳答案
我以前见过这个。您的测试项目引用了其他项目,但是当测试运行时,您会注意到 TestRun Out 文件夹中不存在这些程序集。
与从固定位置运行单元测试的其他测试运行器不同,MSTest 将其所需的程序集复制到执行测试的测试运行文件夹中。该设计允许您比较测试运行之间的测试结果、覆盖率和输出。
常见的误解是,像“Copy Local”这样的编译设置会以某种方式影响用于测试的依赖项,这根本不是真的。 MSTest 使用反射 以确定测试运行所需的程序集引用。
您看到的错误可能是因为您引用了程序集,但测试程序集没有直接使用它。您可以通过使用 IL 检查实用程序(DotPeek、Reflector 等)查看测试装配引用来验证这一点。 (这通常是在 XAML 中引用程序集的 WPF 项目中的问题。)
要修复,请使用 DeploymentSettings 将程序集复制到输出文件夹;或在测试项目中使用程序集。例如,将以下内容添加到您的测试项目将发出 IL,以确保已部署程序集:
var type = typeof(AssemblyNotBeingCopied.MyClass);
关于.net - TFS 在构建服务器上不部署引用的程序集来测试目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15241965/