【发布时间】:2017-08-09 21:14:47
【问题描述】:
我以前将我的解决方案的所有单元测试都包含在一个库中,最近被拆分出来了。当位于单个程序集中时,所有测试都在本地和 TeamCity 上通过,但分开时会出现版本冲突。
配置:
- Team City 7.1.5(内部版本 24400)
- 自动夹具 3.20.2
- AutoFixture.AutoMoq 3.20.2
- 起订量 4.2.1402.2112
- NUnit 2.6.3
我有几个单元测试程序集,它们都引用了一个基础测试库。所有测试程序集都使用上面列出的 NuGet 包。
在开发机器(VS 2015)上运行测试时,所有测试都成功通过。
运行团队城市构建时,抛出以下错误:
System.IO.FileLoadException : 无法加载文件或程序集 'Moq, Version=4.1.1308.2120, Culture=neutral, PublicKeyToken=69f491c39445e920' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)在 Ploeh.AutoFixture.AutoMoq.MockPostprocessor.Create(对象请求,ISpecimenContext 上下文)
我的解决方案中的任何地方都没有引用 Moq 4.1.1308.2120,所以我知道它一定是来自 AutoFixture 的引用。
将 AutoFixture 更新到 3.31.3 没有任何区别。
我在所有测试程序集的 app.config 文件中都有以下绑定重定向:
<dependentAssembly>
<assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.1402.2112" newVersion="4.2.1402.2112" />
</dependentAssembly>
我无法将 Moq 版本降级到 4.1.1308.2120,因为我在测试中使用了 4.2 的功能。
在我看来,Team City 忽略了重定向。我不知道为什么,并且尝试了这些程序集的所有版本组合后,我无法让 Team City 成功运行测试。
【问题讨论】:
-
Team City 如何运行测试?它使用哪个测试运行器?
-
如果您在开发机器上使用相同的测试运行程序,能否重现该问题?
-
我刚刚试了一下,所有测试都成功通过了:/
-
可能是旧版本的 Moq 隐藏在开发机器上的 GAC 中吗?我建议使用 Fuslogvw 查看它从本地加载的位置,然后您可以在 TeamCity 机器上再次尝试,看看它是否在做同样的事情。
-
如果我有 AutoFixture.AutoMoq 3.20.1 和 AutoFixture 3.20.2,我会收到相同的错误,但对于 AutoFixture 3.20.1。这强烈表明 TeamCity 正在忽略绑定重定向。
标签: nunit teamcity moq autofixture teamcity-7.0