2

改天,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% 的测试失败。调查待续...

4

2 回答 2

0

通常,当测试在本地通过但未在构建服务器上通过时,您可能需要包含您的程序集依赖项,或者如果您的测试正在使用数据库,则您正在正确连接到数据库。

于 2015-02-05T18:29:45.120 回答
0

终于找到了答案——在 TFS 构建服务器上随机测试失败的问题是由使用Microsoft Fakes Framwork. 在我们的本地系统上,一切都按预期工作 - 我们在不同的单元测试项目中定义了 Fakes(通常每个“正常”项目都有一个测试项目)。

在构建服务器上,所有的假货都是在同一个目录中生成的,因此根据项目的构建顺序(每个构建的部分可能不同),首先生成的假货会被以下项目的假货覆盖,等等。

我们没有将假定义作为我们解决方案中每个项目的一部分,而是对其进行了更改,以便我们拥有一个解决方案范围内的假定义(例如System.Web.Fakes.dll),我们从需要它的每个测试项目链接到它(添加现有项目 => 添加作为链接)。这解决了在构建服务器上运行单元测试的问题,所有测试再次通过。

于 2015-05-14T12:36:27.480 回答