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

5
我有一个Coded-UI测试项目,其中引用了解决方案中的其他程序集。不知何故,一些程序集没有复制到TestResults/Out目录中,而其他程序集则已经被复制了。所有程序集都将Copy Local选项设置为true(虽然我不知道这是否真的很重要),并且在其他选项上完全相同。当我从VS2010本地启动测试时,所有程序集都会被复制,但是在构建服务器上却没有被复制。
如果我使用[DeploymentItem]属性来强制部署这些“淘气”的程序集,它们会成功部署。
我不明白 - 我一直认为,如果您引用程序集(在Solution ExplorerReferences部分中),那么该程序集将被复制到TestResults/Out中,并且需要使用[DeploymentItem]来复制一些.xml和其他配置文件。

这些程序集与您的项目有什么关系 - 它们是项目引用还是静态链接(第三方库等)? - bryanbcook
它们是项目参考。 - nikita
1个回答

14

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

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

常见的误解是,类似"Copy Local"的编译设置会影响用于测试的依赖项,这是不正确的。MSTest使用反射来确定测试运行所需的程序集引用。

您看到的错误可能是因为您已引用该程序集,但测试程序集并未直接使用它。您可以使用IL检查实用程序(DotPeek,Reflector等)查看测试程序集引用来验证这一点。(这在引用XAML中的程序集的WPF项目中经常出现问题。)

要解决此问题,请使用DeploymentSettings将程序集复制到输出文件夹;或在测试项目中使用该程序集。例如,将以下内容添加到测试项目将生成确保程序集被部署的IL:

var type = typeof(AssemblyNotBeingCopied.MyClass);

1
谢谢您的建议,但是没有帮助。我已经添加了typeof语句来测试方法,但是MSTest仍然无法部署多个程序集。 - nikita
1
对我有用。请检查您引用的类型是否在您想要加载的程序集中。 - Paul Taylor
我遇到了一个相关的问题,但无论在哪里都找不到答案。非常感谢。有人知道MSTest在当前版本中是否仍然以这种方式工作吗? - seso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接