另一天,VS2012和单元测试的另一个问题是:我们的解决方案有三个测试项目,共包含335个不同的单元测试。所有这些测试都成功地在不同的机器上本地运行,但是当我们签入TFS 2012构建服务器时,每次只发现235个测试。
有15个不同的测试类包含单元测试,其中一些使用新的Fakes
框架,其他MOQ
,一些没有或两者都有。所有类都驻留在以测试结尾的测试项目(程序集)中,类本身都以测试结尾。
在测试运行期间,某些类在构建过程中根本没有被发现,在其他类中,例如12个测试中有8个被发现并运行。
以“8个满分12”为例,正在生成的[ProjectNameTest] .dll显示使用.NET Reflector 7.0
的所有12个测试,这只是为了不运行某些测试。在未运行/发现的测试中,我也找不到任何相似之处(例如,使用Fakes
/ MOQ
/ ...进行的测试)。
正在使用的构建设置将Test Sources Spec
定义为**\*.dll
(它曾经是**\*test*.dll
,但我更改了这一点只是为了确保考虑所有文件。)< / p>
对于我最初开始的Run Settings
,没有Run Settings File
和CodeCoverageEnabled
。作为尝试解决问题的一部分,我还将其更改为用户定义的UnitTest.runsettings
文件,遗憾的是结果相同。
有人知道为什么会出现这些问题吗?可能是什么原因? VS2010和Moles
工作得更好,VS2012最近造成了很多麻烦。
更新
几个月后,我们最终将TFS安装更新到Update 3,但这使事情变得更糟。构建服务器上的单元测试根本不再运行。启用转储并分析它们会显示抛出StackOverflowException
,但没有关于可能导致它的测试的指示。同样,在本地不同的开发人员系统上,测试运行没有任何问题。
我们正在考虑在微软打电话,因为我们花了太多时间让整个事情发挥作用(再次)。鼹鼠好多了......一旦取得某种进展,我会尽快更新。
更新2
又过了几个星期,还没有真正的解决方案。由于我们现在从VS2012迁移到VS2013(每次都是Premium),我们发现所有测试现在都作为构建过程的一部分运行(再次)。不幸的是,我们仍然遇到让所有测试都通过的问题 - 本地,一切都在多个系统上运行良好,在构建服务器上大约有10%的测试失败。调查将继续......
答案 0 :(得分:0)
通常,当测试在本地传递而不在构建服务器上传递时,您可能需要包含程序集依赖项,或者如果您的测试使用的数据库正确连接到数据库。
答案 1 :(得分:0)
最后找到答案 - 使用var text = '';
if ((xTimeline(d.endDate) - xTimeline(d.startDate) == 0)) {
text+= d.title + "<br/><p>" + displayDate(d.startDate) + "</p>" + d.content;
} else {
text+= d.title + "<br/><p>" + displayDate(d.startDate) + " to " + displayDate(d.endDate) + "</p>" + d.content;
}
if (d.dateFormat == "Year only") {
text += d.title + "<br/><p>" + displayYear(d.startDate) + "</p>" + d.content;
} else if (d.dateFormat == "Month and year") {
text += d.title + "<br/><p>" + displayMonthYear(d.startDate) + "</p>" + d.content;
} else {
text += d.title + "<br/><p>" + displayDate(d.startDate) + "</p>" + d.content;
}
return text;
导致TFS构建服务器上随机测试失败的问题。在我们的本地系统上,一切都按预期工作 - 我们在不同的单元测试项目中定义了Fakes(通常是每个“正常”项目的一个测试项目)。
在构建服务器上,所有假货都是在同一目录中生成的,因此根据项目的构建顺序(每个构建的部分可能不同),首先生成的假货被以下假货覆盖项目等。
我们没有将假定义作为我们解决方案中每个项目的一部分,而是对其进行了更改,以便我们对假货(例如Microsoft Fakes Framwork
)进行解决方案广泛的定义,我们将从需要的每个测试项目链接到这些定义它(添加现有项目=&gt;添加为链接)。这解决了在构建服务器上运行单元测试的问题,所有测试再次通过。