改天,VS2012 和单元测试的另一个问题:我们的解决方案有三个测试项目,共包含 335 个不同的单元测试。所有这些测试都成功地在不同的机器上本地运行,但是当签入我们的 TFS 2012 构建服务器时,每次只发现 235 个测试。
有 15 个不同的测试类包含单元测试,其中一些使用新Fakes
框架,其他MOQ
一些没有或两者都使用。所有类都驻留在以 Test 结尾的测试项目(程序集)中,类本身都以Test结尾。
作为构建过程的一部分,在测试运行期间根本没有发现一些类,在其他类中,例如 12 个测试中有 8 个被发现并运行。
以“12 个中的 8 个”为例,正在生成的 [ProjectNameTest].dll 显示了所有 12 个使用.NET Reflector 7.0
的测试,只是为了不运行某些测试。在未运行/未发现的测试中,我也找不到任何相似之处(例如使用Fakes
/ MOQ
/ ... 的测试)。
正在使用的构建设置定义Test Sources Spec
为**\*.dll
(它曾经是**\*test*.dll
,但我更改了它只是为了确保考虑到所有文件)。
对于Run Settings
我最初从 noRun Settings File
和开始CodeCoverageEnabled
。作为尝试解决问题的一部分,我还将其更改为用户定义的UnitTest.runsettings
文件,不幸的是结果相同。
有人知道为什么会出现所有这些问题吗?可能是什么原因?VS2010和Moles
工作好多了,VS2012最近引起了很多麻烦。
更新
几个月后,我们终于将 TFS 安装更新为 Update 3,但这让事情变得更糟。构建服务器上的单元测试根本不再运行。启用转储并分析它们表明StackOverflowException
抛出了 a,但没有关于可能导致它的测试的指示符。同样,在不同的开发人员系统上本地运行测试没有任何问题。
我们正在考虑在微软打电话,因为我们花了太多时间让整个事情(再次)工作。痣好多了……一旦有某种进展,我会及时更新。
更新 2
又过了几个星期,还没有真正的解决方案。由于我们现在已经从 VS2012 迁移到 VS2013(每次都是高级版),我们发现所有测试现在都作为构建过程的一部分(再次)运行。不幸的是,我们仍然无法让所有测试通过 - 在本地,在多个系统上一切都运行良好,在构建服务器上大约 10% 的测试失败。调查待续...