在构建服务器上时,TFS没有将引用的程序集部署到测试目录

时间:2013-03-06 08:04:04

标签: .net unit-testing mstest coded-ui-tests

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

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

我无法理解 - 我一直认为如果你引用汇编(在References的{​​{1}}部分中),汇编将被复制到Solution Explorer和{{1需要复制一些.xml和其他配置文件。

1 个答案:

答案 0 :(得分:13)

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

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

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

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

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

var type = typeof(AssemblyNotBeingCopied.MyClass);