Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing TFS2012构建don';t在VS2012解决方案中查找所有单元测试_Unit Testing_Visual Studio 2013_Tfsbuild - Fatal编程技术网

Unit testing TFS2012构建don';t在VS2012解决方案中查找所有单元测试

Unit testing TFS2012构建don';t在VS2012解决方案中查找所有单元测试,unit-testing,visual-studio-2013,tfsbuild,Unit Testing,Visual Studio 2013,Tfsbuild,另一天,VS2012和单元测试的另一个问题是:我们的解决方案有三个测试项目,总共包含335个不同的单元测试。所有这些测试都成功地在不同的机器上本地运行,但当检入我们的TFS 2012构建服务器时,每次只发现235个测试 有15个不同的测试类包含单元测试,其中一些使用新的Fakes框架,另一些MOQ,一些没有或两者都有。所有类都位于以test结尾的测试项目(程序集)中,类本身都以test结尾 作为构建过程的一部分,在测试运行期间,一些类根本没有被发现,在其他类中,例如12个测试中有8个被发现并运行

另一天,VS2012和单元测试的另一个问题是:我们的解决方案有三个测试项目,总共包含335个不同的单元测试。所有这些测试都成功地在不同的机器上本地运行,但当检入我们的TFS 2012构建服务器时,每次只发现235个测试

有15个不同的测试类包含单元测试,其中一些使用新的
Fakes
框架,另一些
MOQ
,一些没有或两者都有。所有类都位于以test结尾的测试项目(程序集)中,类本身都以test结尾

作为构建过程的一部分,在测试运行期间,一些类根本没有被发现,在其他类中,例如12个测试中有8个被发现并运行

以“12个测试中的8个”为例,正在生成的[ProjectNameTest].dll使用
.NET Reflector 7.0
显示了所有12个测试,只是为了不运行某些测试。在未运行/发现的测试中,我也找不到任何相似之处(例如,使用
赝品的测试
/
MOQ
/…)

正在使用的构建设置将
测试源规范定义为
***.dll
(它以前是
***Test*.dll
,但我更改它只是为了确保考虑到所有文件)

对于
运行设置
我最初启动时没有
运行设置文件
CodeCoverageEnabled
。作为解决问题的一部分,我还将其更改为一个用户定义的
UnitTest.runsettings
文件,不幸的是结果相同

有人知道为什么会有这些问题吗?原因可能是什么?VS2010和
Moles
工作得更好,VS2012最近引起了很多麻烦

更新

几个月后,我们终于将TFS安装更新为更新3,但这使情况变得更糟。构建服务器上的单元测试根本不再运行。启用转储并对其进行分析表明抛出了一个
StackOverflowException
,但没有关于可能导致它的测试的指示。同样,测试在不同的开发人员系统上本地运行,没有任何问题

我们正在考虑给微软打电话,因为我们花了太多的时间让整个事情(再次)运作起来。鼹鼠好多了。。。一旦有进展,我会及时更新

更新2


又过了几个星期,还没有真正的解决办法。当我们现在从VS2012移动到VS2013(每次都是Premium)时,我们发现所有测试现在都作为构建过程的一部分运行(再次)。不幸的是,我们仍然无法通过所有测试——在本地,在多个系统上一切都正常运行,在构建服务器上,大约有10%的测试失败。调查将继续…

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

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

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


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

这可能是configuration manager中的设置不正确吗?就像你的一个测试项目的平台可能是不正确的,所以它不是构建的,然后又不是测试的?当查看日志文件时-测试项目生成吗?所有配置的项目生成设置都是相同的,我们进行了三次检查,不幸的是,问题一定出在其他地方。我还没有尝试的(在发布原始问题时不可用)是安装VS2012更新3(不是RC)。两周后回来工作时会这样做。你找到解决办法了吗?这很烦人,很乏味,但我还在努力。问题是,该系统是大型安装的一部分,不能太容易更新。不过,计划在11月底完成,一旦完成,我们计划在问题持续存在的情况下与Microsoft进行通话。仅供参考,TFS构建不会“发现”单元测试。您必须在生成定义中指定要运行的测试。情况并非如此,此类测试应失败并显示相应的错误消息。发生的情况是,每次测试作为构建过程的一部分运行时,任意测试都会失败。测试错误没有意义的情况并不少见。你看到了什么错误?我看到过许多错误的映像错误,这些错误通常是由运行错误的vsconsole工具体系结构引起的。